如何重新索引多维数组的所有子数组元素?

162
问题是如何重置一个数组的键,例如:
Array ( 
    [1_Name] => Array ( 
        [1] => leo 
        [4] => NULL 
    ) 
    [1_Phone] => Array ( 
        [1] => 12345 
        [4] => 434324
    )  
)

重置为:

Array ( 
    [1_Name] => Array ( 
        [0] => leo 
        [1] => NULL 
    ) 
    [1_Phone] => Array ( 
        [0] => 12345 
        [1] => 434324
    ) 
)

请查看此答案:https://dev59.com/TW025IYBdhLWcg3wi2qw#24332702 - Web_Developer
6个回答

346

重置数组中所有数组的键:

$arr = array_map('array_values', $arr);

如果您只想重置第一级数组键,请使用array_values(),而不使用array_map


12
由于某种原因我没有重置数组的键,只能使用 array_values 函数。 - SSH This
1
@SSH 你是否在这里使用了一个数组的数组 - deceze
1
不对,这就是问题所在,我以为这个操作应该“重置数组元素的键”,但实际上并不是。 - SSH This
3
不需要使用array_map:$ret = array_values($ret);已足以重置数值键。 - Marek Lewandowski
@Marek 如果您需要重置数组中的数组的键,则不行。 - deceze
2
我不知道使用array_values重置值是否有记录,但应该有。这确实有助于减少我编写的代码行数 :) - carbontwelve

237
$array[9] = 'Apple';
$array[12] = 'Orange';
$array[5] = 'Peach';

$array = array_values($array);

通过这个函数,你可以重置你的数组。
$array[0] = 'Apple';
$array[1] = 'Orange';
$array[2] = 'Peach';

23

11

在这里,您可以看到deceze提供的方法与简单的array_values方法之间的差异:

数组:

$array['a'][0] = array('x' => 1, 'y' => 2, 'z' => 3);
$array['a'][5] = array('x' => 4, 'y' => 5, 'z' => 6);

$array['b'][1] = array('x' => 7, 'y' => 8, 'z' => 9);
$array['b'][7] = array('x' => 10, 'y' => 11, 'z' => 12);

根据 deceze 的方式,这是你的输出结果:

$array = array_map('array_values', $array);
print_r($array);

/* Output */

Array
(
    [a] => Array
        (
            [0] => Array
                (
                    [x] => 1
                    [y] => 2
                    [z] => 3
                )
            [1] => Array
                (
                    [x] => 4
                    [y] => 5
                    [z] => 6
                )
        )
    [b] => Array
        (
            [0] => Array
                (
                    [x] => 7
                    [y] => 8
                    [z] => 9
                )

            [1] => Array
                (
                    [x] => 10
                    [y] => 11
                    [z] => 12
                )
        )
)

如果你只使用array_values函数,这里是你的输出结果:

$array = array_values($array);
print_r($array);

/* Output */

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [x] => 1
                    [y] => 2
                    [z] => 3
                )
            [5] => Array
                (
                    [x] => 4
                    [y] => 5
                    [z] => 6
                )
        )
    [1] => Array
        (
            [1] => Array
                (
                    [x] => 7
                    [y] => 8
                    [z] => 9
                )
            [7] => Array
                (
                    [x] => 10
                    [y] => 11
                    [z] => 12
                )
        )
)

6
$result = ['5' => 'cherry', '7' => 'apple'];
array_multisort($result, SORT_ASC);
print_r($result);

数组([0] => 苹果 [1] => 樱桃)

//...
array_multisort($result, SORT_DESC);
//...

数组(Array):[0] => 樱桃,[1] => 苹果。


-7

4
请务必阅读您提供链接的手册;reset有另外的用途。 - deceze
只需将指针移动到数组的第一个元素。Topicstarter正在寻找将键值降为默认状态0、1、2... N的方法。 - SlowSuperman

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接