PHP按值合并数组
我知道这很容易用foreach
,然后while
- >列表等程序,(我已经完成它),但是我觉得我的代码有点脏,它doesn “T看起来像最好的解决办法...我希望利用本地的PHP阵列功能做到以下几点:PHP按值合并数组
我有两个数组看起来像这样的:
[0] (Array)#2 [rank] "579" [id] "1" [1] (Array)#4 [rank] "251" [id] "2" [0] (Array)#2 [size] "S" [status] "A" [id] "1" [1] (Array)#15 [size] "L" [status] "A" [id] "2"
我需要为结果如下:
[0] (Array)#2 [size] "S" [status] "A" [id] "1" [rank] "579" [1] (Array)#2 [size] "L" [status] "A" [id] "2" [rank] "251"
有没有办法能够合并两个数组与id
值(或其他),而不会进入无穷无尽的foreach
s?
$array = array_merge_recursive($array1, $array2);
或使自己的功能(可能更快)
function my_array_merge(&$array1, &$array2) {
$result = Array();
foreach($array1 as $key => &$value) {
$result[$key] = array_merge($value, $array2[$key]);
}
return $result;
}
$array = my_array_merge($array1, array2);
print_r($array);
太棒了!,感谢这个,仅供参考:只要您需要丢弃那些不在这两个阵列上重复的记录,函数方法就会非常出色。 –
这在技术上没有回答这个问题。 @OsvaldoM。想要根据id的值而不是按键进行连接。 – Ray
好吧,让我们suppost你的阵列称为$ ARR1和$ ARR2,你可以这样做:
<?php
$newarray = Array();
foreach ($arr1 as $element=>$value){
$newarray = array_merge($arr1[$element],$arr2[$element])
}
?>
正如Ray在评论中注意到的,接受的答案实际上并没有回答这个问题。我无法找到答案,所以我创建了下面的小工具功能:
function array_merge_callback($array1, $array2, $predicate) {
$result = array();
foreach ($array1 as $item1) {
foreach ($array2 as $item2) {
if ($predicate($item1, $item2)) {
$result[] = array_merge($item1, $item2);
}
}
}
return $result;
}
如下使用它:
array_merge_callback($array1, $array2, function ($item1, $item2) {
return $item1['id'] == $item2['id'];
});
有一个很好的一个合并像另一个语言阵列。 这是因为PHP有自动编号数组元素,合并将dublicate或用键替换不同的元素。
现在,它已经改变。
// array_fork
public static function array_fork() {
$args = func_get_args();
$result = array();
foreach ($args as $arr) {
is_array($arr) || exit('[' . __METHOD__ . '] Each item must be an array.');
foreach ($arr as $key => $val) {
if (is_array($val)) {
// recursion
!isset($result[$key]) && $result[$key] = array();
$result[$key] = self::array_fork($result[$key], $arr[$key]);
continue;
}
if (is_numeric($key)) {
if (!in_array($arr[$key], $result))
$result[] = $arr[$key];
} else
$result[$key] = $arr[$key];
}
}
return $result;
}
function custom_array_merge(&$array1, &$array2) {
$result = Array();
foreach ($array1 as $key_1 => &$value_1) {
// if($value['name'])
foreach ($array2 as $key_1 => $value_2) {
if($value_1['name'] == $value_2['name']) {
$result[] = array_merge($value_1,$value_2);
}
}
}
return $result;
}
//通行证$阵列1,& $数组2和改变$ _2 [ '名'] //名在此基础上ü要合并。
两个数组中的相同索引是否具有相同id的元素?换句话说,如果具有id 5的元素在第一个数组中的索引3处,它是否也会位于第二个数组中的索引3? – deviousdodo