Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP合并两个数组,其中包含不同数量的元素、$key和$value_Php_Arrays_Merge - Fatal编程技术网

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()
的重复项