- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
是否有递归合并数组的方法,就像 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/
所以我想从一个文本文件动态构建一个多维数组,除了数字键让我感到困惑之外,一切都完美无缺...... 文本文件看起来像这样: a=1 b.c=2 b.d.0.e=3 b.d.0.f=4 b.d.1.e=
所以基本上我有这两个数组我想合并...... array(1) { ["first"]=> array(1) { ["second"]=> arra
我已经浏览了这里的帖子,但找不到任何似乎可以解决我的问题的内容。我对 PHP/MySQL 相当陌生,我似乎无法弄清楚为什么这个 array_merge_recursive 函数一直告诉我我的第一个数组
$array1 = [ '1' => '11', 'b' => 1, 3 => 33, 8 => 8 ]; $array2 = [ '1' => '22
$php -a php > $data1 = ['tag' => 'div', 'classes' => [1,2,3]]; php > $data2 = ['tag' => 'section', '
我正在为 PHP 中的数据结构而苦苦挣扎。我正在尝试使用 array_merge_recursive 通过类似的键来压缩数组,然后获取所有值而不是覆盖它们。这就是我选择 array_merge_rec
我只想合并 $a = array("59745506"=>array("up" => 0,)); $b = array("59745506"=>array("text" => "jfrj")); $c
php中array_merge_recursive函数用于将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面,返回作为结果的数组。本文章将详细介绍array_merge_recur
我有这个代码 $a1 = array( 'success' => TRUE, 'data' => array( 'foo' => ar
我尝试递归合并以下 2 个数组,这样我就不会丢失数据,但我也不希望重复任何数据。 $a = array( 'group1' => array( 'names' => array
是否有递归合并数组的方法,就像 PHP 的 array_merge_recursive() 函数一样,除了整数键被视为字符串键? (对于过程而言,键保持可解析为整数很重要。) 例如: $a = arr
我有一些默认配置,以及一些可配置的特定配置。我需要将特定配置合并到默认配置中。 在特定配置选项不存在的情况下, 将使用默认选项。 在 value 的情况下是标量,具体配置应该应用 在 value 的情
我是一名优秀的程序员,十分优秀!