gpt4 book ai didi

整数键上的 PHP array_merge_recursive 行为

转载 作者:可可西里 更新时间:2023-10-31 22:50:18 24 4
gpt4 key购买 nike

是否有递归合并数组的方法,就像 PHP 的 array_merge_recursive() 函数一样,除了整数键被视为字符串键?

(对于过程而言,键保持可解析为整数很重要。)

例如:

$a = array(
'a' => array(1)
);
$b = array(
'a' => array(2, 3)
);
var_dump(array_merge_recursive($a, $b));

将合并 “a” 键并按预期输出以下内容:

array(1) {
["a"] => array(3) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
}
}

但是,当使用整数作为键时(即使是字符串):

$a = array(
'123' => array(1)
);
$b = array(
'123' => array(2, 3)
);
var_dump(array_merge_recursive($a, $b));

array_merge_recursive() 将返回:

array(2) {
[0] => array(3) {
[0] => int(1)
}
[1] => array(2) {
[0] => int(2)
[1] => int(3)
}
}

而不是非常想要的:

array(1) {
["123"] => array(3) {
[0] => int(1)
[1] => int(2)
[2] => int(3)
}
}

想法?

最佳答案

我正在使用 soulmerge 的想法,即通过添加字符串来转换 key 。然而,我的新函数只能处理 2 个参数,但你就是这种情况,所以我就是这样做的。看看。

// Adds a _ to top level keys of an array
function prefixer($array) {
$out = array();
foreach($array as $k => $v) {
$out['_' . $k] = $v;
}
return $out;
}
// Remove first character from all keys of an array
function unprefixer($array) {
$out = array();
foreach($array as $k => $v) {
$newkey = substr($k,1);
$out[$newkey] = $v;
}
return $out;
}
// Combine 2 arrays and preserve the keys
function array_merge_recursive_improved($a, $b) {
$a = prefixer($a);
$b = prefixer($b);
$out = unprefixer(array_merge_recursive($a, $b));
return $out;
}

示例数据是什么样的?

// some sample data    
$a = array(
'123' => array(1)
);
$b = array(
'123' => array(2, 3)
);

// what do the results say:
print_r($a);
// Array
// (
// [123] => Array
// (
// [0] => 1
// )
//
// )

print_r($b);
// Array
// (
// [123] => Array
// (
// [0] => 2
// [1] => 3
// )
//
// )

让我们尝试一下:

print_r(array_merge_recursive($a, $b));
// Array
// (
// [0] => Array
// (
// [0] => 1
// )
//
// [1] => Array
// (
// [0] => 2
// [1] => 3
// )
//
// )

print_r(array_merge_recursive_improved($a, $b));
// Array
// (
// [123] => Array
// (
// [0] => 1
// [1] => 2
// [2] => 3
// )
//
// )

关于整数键上的 PHP array_merge_recursive 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2213156/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com