- У меня есть двумерный массив, в котором его первое измерение является индексным массивом, а второе - ассоциативным массивом.
- В массиве есть несколько полей-дубликатов, которые я хочу объединить,а для других не дублированных полей я хочу создать массив третьего измерения и вставить их туда.
Это мой код и массив:
Весь код работает правильнопросто поле "datacontractor", которое является моим третьим измерением, не работает должным образом.
<?php
$array=Array
(
"0" => Array
(
"sid" => 10,
"contractorid" => 1,
"fname" => "hi",
"lname" => "fam",
"sname" => "saba",
"materialname" => "beton",
"netweight" => 100,
),
"1" => Array
(
"sid" => 16,
"contractorid" => 2,
"fname" => "a",
"lname" => "a",
"sname" => "khoram",
"materialname" => "kk",
"netweight" => 200,
),
"2" => Array
(
"sid" => 16,
"contractorid" => 7,
"fname" => "a",
"lname" => "a",
"sname" => "khoram",
"materialname" => "kk",
"netweight" => 777,
),
"3" => Array
(
"sid" => 10,
"contractorid" => 5,
"fname" => "hi",
"lname" => "fam",
"sname" => "saba",
"materialname" => "beton",
"netweight" => 200,
),
"4" => Array
(
"sid" => 10,
"contractorid" => 8,
"fname" => "hi",
"lname" => "fam",
"sname" => "saba",
"materialname" => "beton",
"netweight" => 600,
),
"5" => Array
(
"sid" => 15,
"contractorid" => 9,
"fname" => "hi",
"lname" => "fam",
"sname" => "saba",
"materialname" => "beton",
"netweight" => 400,
),
);
$finalarray[]= array();
$sidlist= array();
$arraycount=count($array);
for($i=0;$i<$arraycount ;$i++) {
array_push($sidlist,$array[$i]["sid"]);
}
$sidlist = array_unique($sidlist);
$sidlistcount=count($sidlist);
$sidlist1=array();
foreach ($sidlist as $m){
array_push($sidlist1,$m);
}
for ($i = 0;$i<$sidlistcount ; $i++){
$id=$sidlist1[$i];
$datacontractor[$id]= array();
for ($j = 0;$j<$arraycount ; $j++){
if ($id==$array[$j]["sid"]){
$contractorid = $array[$j]["contractorid"];
$netweight = $array[$j]["netweight"];
$finalarray[$i]=array(
"sid" => $id,
"fname" => $array[$j]["fname"],
"lname" => $array[$j]["lname"],
"sname" => $array[$j]["sname"],
"materialname" => $array[$j]["materialname"],
"datacontractor" => $datacontractor[$id],
);
$datacontractor[$id]["$contractorid"]=$netweight;
echo $id,"<br>";
}
}
}
echo '<pre>';
print_r($finalarray);
echo '<pre>';
Это мой вывод этого кода:
но он имеет неправильный ответв поле «datacontractor».
Array ([0] => Array
(
[sid] => 10
[fname] => hi
[lname] => fam
[sname] => saba
[materialname] => beton
[datacontractor] => Array
(
[1] => 100
[5] => 200
)
)[1] => Array
(
[sid] => 16
[fname] => a
[lname] => a
[sname] => khoram
[materialname] => kk
[datacontractor] => Array
(
[2] => 200
)
)[2] => Array
(
[sid] => 15
[fname] => hi
[lname] => fam
[sname] => saba
[materialname] => beton
[datacontractor] => Array
(
)
))
И, наконец, мой желаемый вывод:
Пожалуйста, проверьте и скажите мне, в чем моя ошибка.
Array ([0] => Array
(
[sid] => 10
[fname] => hi
[lname] => fam
[sname] => saba
[materialname] => beton
[datacontractor] => Array
(
[1] => 100
[5] => 200
[8] => 600
)
)[1] => Array
(
[sid] => 16
[fname] => a
[lname] => a
[sname] => khoram
[materialname] => kk
[datacontractor] => Array
(
[2] => 200
[7] => 777
)
)[2] => Array
(
[sid] => 15
[fname] => hi
[lname] => fam
[sname] => saba
[materialname] => beton
[datacontractor] => Array
(
[9] => 400
)
))