我需要组合两个多维数组才能生成单个合并数组。
数组1($array1
)按键值'vo'排序。我需要将第二个数组($array2
)附加到具有相同userID的第一个数组。
例如:
$array1 = array(
1 => array(
'id' => 1,
'vo' => 1,
'userID' => 21
),
2 => array(
'id' => 2,
'vo' => 2,
'userID' => 22
),
3 => array(
'id' => 3,
'vo' => 3,
'userID' => 23
),
4 => array(
'id' => 4,
'vo' => 5,
'userID' => 25
)
);
第二阵列:
$array2 = array(
1 => array(
'id' => 1,
'userID' => 21
),
2 => array(
'id' => 2,
'userID' => 21
),
3 => array(
'id' => 3,
'userID' => 23
)
);
理想的解决方案:
$desired_solution = array(
1 => array(
'id' => 1,
'vo' => 1,
'userID' => 21
),
2 => array(
'id' => 1,
'userID' => 21
),
3 => array(
'id' => 2,
'userID' => 21
),
4 => array(
'id' => 2,
'vo' => 2,
'userID' => 22
),
5 => array(
'id' => 3,
'vo' => 3,
'userID' => 23
),
6 => array(
'id' => 3,
'userID' => 23
),
...
);
答案 0 :(得分:1)
这是一种产生预期结果的方法。但是时间的复杂性并不适合这个。
function search($array, $key, $value)
{
$results = array();
if (is_array($array)) {
if (isset($array[$key]) && $array[$key] == $value) {
$results[] = $array;
}
foreach ($array as $subarray) {
$results = array_merge($results, search($subarray, $key, $value));
}
}
return $results;
}
$result = array();
foreach($array1 as $arr){
array_push($result, $arr);
$id_to_search = $arr['userID'];
$all_matched = search($array2, 'userID', $id_to_search);
foreach($all_matched as $searched){
array_push($result, $searched);
}
}
如果我们考虑一下排序的东西和阵列的其他方面,我们可以有更好的时间复杂度来产生预期的结果。尝试在代码上运行。
答案 1 :(得分:0)
最终结果将包含从0开始的键。
<?php
$merged = array_merge($array1, $array2);
usort($merged, 'my_cmp');
function my_cmp($a, $b)
{
$diff = $a['userID'] - $b['userID'];
if($diff == 0)
$diff = $a['id'] - $b['id'];
if($diff == 0)
$diff = isset($b['vo']);
return $diff;
}
在此处排序提示:How can I sort arrays and data in PHP?
值得自己动手去分类。