PHP合并两个数组,其中包含不同数量的元素、$key和$value
我想使用一个数组中的键和另一个数组中的值(如果键匹配)将两个元素数不同的数组合并在一起。包含所需值的数组中的元素可能较少,尽管我希望保留原始数组中生成的空键。例如: //包含要保留的键的数组PHP合并两个数组,其中包含不同数量的元素、$key和$value,php,arrays,merge,Php,Arrays,Merge,我想使用一个数组中的键和另一个数组中的值(如果键匹配)将两个元素数不同的数组合并在一起。包含所需值的数组中的元素可能较少,尽管我希望保留原始数组中生成的空键。例如: //包含要保留的键的数组 $arr1=数组(1,2,3,4,5,6,7,8,9,10,11,12) //包含我要使用的值的数组 $arr2=array(01=>123,03=>123,05=>123,07=>123,09=>123,11=>123) //使用一些无价值的元素获得所需的结果 $results=array(01=>123
$arr1=数组(1,2,3,4,5,6,7,8,9,10,11,12)代码>
//包含我要使用的值的数组
$arr2=array(01=>123,03=>123,05=>123,07=>123,09=>123,11=>123)代码>
//使用一些无价值的元素获得所需的结果
$results=array(01=>123,02,03=>123,04,05=>123,06,07=>123,08,09=>123,10,11=>123,12)代码>
如您所见,结果数组保留12个元素,但仅将值应用于两个数组中的键匹配的位置
我尝试了$results=array\u intersect\u键($arr1+$arr2,$arr2)代码>和其他PHP函数以及:
for ($i=1; $i < count($arr1); $i++) {
if (isset($arr2[$i])) {
$arr3[] = $arr2[$i];
} else {
$arr3[] = $arr1[$i];
}
}
print_r($arr3);
for($i=1;$i
还没有运气
提前谢谢 对于这样的数组
//Array that contains keys I would like to retain
$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
//Array that contains values I'd like to use
$arr2 = array(1=>123, 3=>123, 5=>123, 7=>123, 9=>123, 11=>123);
$result = array_fill_keys(
$arr1,
null
);
array_walk(
$result,
function(&$value, $key) use($arr2) {
$value = (isset($arr2[$key])) ? $arr2[$key] : null;
}
);
var_dump($result);
$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$arr2 = array(1=>123, 3=>123, 5=>123, 7=>123, 9=>123, 11=>123);
这应该行得通
foreach ($arr1 as $key) {
$results[$key] = isset($arr2[$key]) ? $arr2[$key] : null;
}
或者使用其他一些PHP函数:
$results = array_replace(array_fill_keys($arr1, null), $arr2);
对于这样的数组
$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$arr2 = array(1=>123, 3=>123, 5=>123, 7=>123, 9=>123, 11=>123);
这应该行得通
foreach ($arr1 as $key) {
$results[$key] = isset($arr2[$key]) ? $arr2[$key] : null;
}
或者使用其他一些PHP函数:
$results = array_replace(array_fill_keys($arr1, null), $arr2);
对于这样的数组
$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$arr2 = array(1=>123, 3=>123, 5=>123, 7=>123, 9=>123, 11=>123);
这应该行得通
foreach ($arr1 as $key) {
$results[$key] = isset($arr2[$key]) ? $arr2[$key] : null;
}
或者使用其他一些PHP函数:
$results = array_replace(array_fill_keys($arr1, null), $arr2);
对于这样的数组
$arr1 = array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12);
$arr2 = array(1=>123, 3=>123, 5=>123, 7=>123, 9=>123, 11=>123);
这应该行得通
foreach ($arr1 as $key) {
$results[$key] = isset($arr2[$key]) ? $arr2[$key] : null;
}
或者使用其他一些PHP函数:
$results = array_replace(array_fill_keys($arr1, null), $arr2);
首先将$arr1
的值设置为false
,以仅保留键:
$arr1=数组填充键(数组填充键($arr1),false)
或者,如果您自己正在生成$arr1
,请将其定义为:$arr1=Array(false、false、false、false/*等*/)代码>
现在使用数组联合运算符:
$result=$arr2+$arr1代码>
+运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键-来自文档:)
然后,如果需要,按键对数组进行排序:ksort($array)
首先将$arr1
的值设置为false
以仅保留键:
$arr1=数组填充键(数组填充键($arr1),false)
或者,如果您自己正在生成$arr1
,请将其定义为:$arr1=Array(false、false、false、false/*等*/)代码>
现在使用数组联合运算符:
$result=$arr2+$arr1代码>
+运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键-来自文档:)
然后,如果需要,按键对数组进行排序:ksort($array)
首先将$arr1
的值设置为false
以仅保留键:
$arr1=数组填充键(数组填充键($arr1),false)
或者,如果您自己正在生成$arr1
,请将其定义为:$arr1=Array(false、false、false、false/*等*/)代码>
现在使用数组联合运算符:
$result=$arr2+$arr1代码>
+运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键-来自文档:)
然后,如果需要,按键对数组进行排序:ksort($array)
首先将$arr1
的值设置为false
以仅保留键:
$arr1=数组填充键(数组填充键($arr1),false)
或者,如果您自己正在生成$arr1
,请将其定义为:$arr1=Array(false、false、false、false/*等*/)代码>
现在使用数组联合运算符:
$result=$arr2+$arr1代码>
+运算符返回附加到左侧数组的右侧数组;对于两个数组中都存在的键-来自文档:)
然后,如果需要,按键对数组进行排序:ksort($array)
您意识到08
和09
的值并不是大多数人期望的值,而是0
。。。。以0开头的数字将被视为八进制值。我理解您的评论,并进行了相应的编辑。非常感谢。有什么解决方案吗?那么,$arr1
中的值应该是$results
中的键吗?@Don'tPanic,是的,这是完全正确的。您可能会发现08
和09
的值不是大多数人期望的值,但实际上是0
。。。。以0开头的数字将被视为八进制值。我理解您的评论,并进行了相应的编辑。非常感谢。有什么解决方案吗?那么,$arr1
中的值应该是$results
中的键吗?@Don'tPanic,是的,这是完全正确的。您可能会发现08
和09
的值不是大多数人期望的值,但实际上是0
。。。。以0开头的数字将被视为八进制值。我理解您的评论,并进行了相应的编辑。非常感谢。有什么解决方案吗?那么,$arr1
中的值应该是$results
中的键吗?@Don'tPanic,是的,这是完全正确的。您可能会发现08
和09
的值不是大多数人期望的值,但实际上是0
。。。。以0开头的数字将被视为八进制值。我理解您的评论,并进行了相应的编辑。非常感谢。有什么解决方案吗?那么,$arr1
中的值应该是$results
中的键吗?@Don'tPanic,是的,这完全正确。数组函数列表中可能存在从未注意到的array\u replace()
的重复项