我正在尝试编写代码来组织数组。我有这个代码:
$arr = array(0=>array('key 1'=>'value 1', 'key 2'=>'value 2', 'key 3'=> array('2'=>'more values 1', '5'=>'more values 2', 7=>'more values 3')),
2=>array(0=>'value 1', 2=>'value 2', 4=> array('key 2'=>'more values 1', 'key 5'=>'more values 2', 'key 7'=>'more values 3')));
echo print_r($arr);
收益率:
Array
(
[0] => Array
(
[key 1] => value 1
[key 2] => value 2
[key 3] => Array
(
[2] => more values 1
[5] => more values 2
[7] => more values 3
)
)
[2] => Array
(
[0] => value 1
[2] => value 2
[4] => Array
(
[key 2] => more values 1
[key 5] => more values 2
[key 7] => more values 3
)
)
)
我希望整数的键可以用array_values()
重命名。数组需要这样的输出:
Array
(
[0] => Array
(
[key 1] => value 1
[key 2] => value 2
[key 3] => Array
(
[0] => more values 1
[1] => more values 2
[2] => more values 3
)
)
[1] => Array
(
[0] => value 1
[1] => value 2
[2] => Array
(
[key 2] => more values 1
[key 5] => more values 2
[key 7] => more values 3
)
)
)
但不幸的是,我无法生成一个有效的代码。
您很少需要这样做,因为您可以访问数组元素而无需递增键,比如使用foreach()
。但这里有一个递归函数:
function array_reindex_recursive(&$array) {
if(is_int(key($array))) {
$array = array_values($array);
}
foreach($array as $key => &$val) {
if(is_array($val)) {
array_reindex_recursive($val);
}
}
}
array_reindex_recursive($arr);
- 检查数组中的第一个键是否为整数(如果其他键不是整数,这可能是个问题)
- 如果是,请运行
array_values()
以重新索引 - 循环遍历这些值,如果其中一个是数组,则递归调用该函数
如果你想确保所有密钥都是整数,那么用这样的东西替换第一个if
:
if(count(array_filter(array_keys($array), 'is_int')) == count($array)) {
$array = array_values($array);
}
- 过滤掉所有非整数键,并与原始数组的长度进行比较
- 如果长度相同,则所有键都是整数,请运行
array_values()
重新索引