php-如何在一个数组中合并键和子键

php-如何在一个数组中合并键和子键,php,arrays,Php,Arrays,我有一个这样的数组: array( (int) 1 => array( (int) 3 => 'value', (int) 12 => 'value' ), (int) 5 => array( (int) 8 => 'value', (int) 10 => 'value', (int) 15 => 'value' ) ) 在不考虑值的情况下,

我有一个这样的数组:

array(
    (int) 1 => array(
        (int) 3 => 'value',
        (int) 12 => 'value'
    ),
    (int) 5 => array(
        (int) 8 => 'value',
        (int) 10 => 'value',
        (int) 15 => 'value'
    )
)
在不考虑值的情况下,将键与子键合并以获得类似结果的最佳方法是什么

array(
    (int) 0 => (int) 1,
    (int) 1 => (int) 3,
    (int) 2 => (int) 12,
    (int) 3 => (int) 5,
    (int) 4 => (int) 8,
    (int) 5 => (int) 10,
    (int) 6 => (int) 15
)
您可以使用php 5及以上版本

//$oldArray = your array
$newArray = [];

function build_array($item,$key){

    global $newArray;

    $newArray[] = $key;

}
array_walk_recursive($oldArray,'build_array');
$newArray = array_merge(array_keys($oldArray),$newArray); //needed for the first keys (1,5) as Jory Geerts correctly pointed out.

使用
array\u键
array\u merge
功能的简短解决方案:

$keys = [];
foreach ($arr as $k => $v) {  // $arr is your initial array
    $keys[] = $k;
    if (is_array($v)) $keys = array_merge($keys, array_keys($v));
}

print_r($keys);
输出:

Array
(
    [0] => 1
    [1] => 3
    [2] => 12
    [3] => 5
    [4] => 8
    [5] => 10
    [6] => 15
)

只需注意:杰克,你可以删除答案,然后编辑它,然后取消删除答案。与其删除一个答案然后再创建另一个答案,我的坏@RiggsFollyNot bad,只是想让你知道使用globals会使代码变得非常脆弱,所以我们应该尽可能避免这种情况。在本例中,您可以使用一个闭包,如下所示:
array\u walk\u recursive($oldArray,function($item,$key)use($newArray){$newArray[]=$key;})
但是,根据手册,“保存数组的任何键都不会传递给函数。”因此,这种方法不起作用,因为Carilboue也需要数组中的1和5。什么是$v,什么是$k,在上下文中这些都是有意义的-但为什么需要牺牲可读性来保存几个字符?您正在搜索“字符”吗或者是为了有效的解决方案?我只是在问@RomanPerekhrest的理由-似乎不必要就是一切,只是降低了代码的可读性。似乎不必要就是一切-你觉得一切都不必要吗?这似乎只是你的观点,我只是相信提供可读代码比提供不太可读的代码更好,因为它只是为了保存字符,特别是如果代码一开始不是自解释的。
Array
(
    [0] => 1
    [1] => 3
    [2] => 12
    [3] => 5
    [4] => 8
    [5] => 10
    [6] => 15
)