Redefinir chaves de elementos de matriz em php?

124

A questão é como redefinir a chave, por exemplo, para uma matriz:

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

redefinir para:

Array ( 
    [1_Name] => Array ( 
        [0] => leo 
        [1] => NULL 
    ) 
    [1_Phone] => Array ( 
        [0] => 12345 
        [1] => 434324
    ) 
)
Leo Chan
fonte
Verifique esta resposta: stackoverflow.com/questions/5943149/…
Web_Developer

Respostas:

294

Para redefinir as chaves de todas as matrizes em uma matriz:

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

Caso você queira apenas redefinir as chaves da matriz de primeiro nível, use array_values()sem array_map.

deceze
fonte
9
Não reinicializei as teclas da minha matriz por algum motivo, tive que usar apenas a array_valuesfunção.
SSH Em
1
@SSH Você o usou em uma matriz de matrizes , como foi solicitado aqui?
deceze
1
Não, esse era o problema, eu pensei que isso deveria "Redefinir as chaves dos elementos da matriz", não é.
SSH Esta
3
você não precisa usar o array_map: $ ret = array_values ​​($ ret); é suficiente para repor as teclas numéricas
Marek Lewandowski
2
Eu não sei se o uso de array_values ​​para redefinir valores está documentado, mas deveria ser. Este baixo corte realmente ajudou com o número de linhas que eu estava escrevendo :)
carbontwelve
192
$array[9] = 'Apple';
$array[12] = 'Orange';
$array[5] = 'Peach';

$array = array_values($array);

através desta função, você pode redefinir sua matriz

$array[0] = 'Apple';
$array[1] = 'Orange';
$array[2] = 'Peach';

fonte
Esta solução funcionou para mim
Amirhossein Tarmast
8

Aqui você pode ver a diferença entre a maneira que o deceze ofereceu em comparação com a array_valuesabordagem simples :

A matriz:

$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);

De decezecerta forma, aqui está sua saída:

$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
                )
        )
)

E aqui está sua saída se você usar apenas a array_valuesfunção:

$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
                )
        )
)
Mahdi
fonte
5
$result = ['5' => 'cherry', '7' => 'apple'];
array_multisort($result, SORT_ASC);
print_r($result);

Matriz ([0] => maçã [1] => cereja)

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

Matriz ([0] => cereja [1] => maçã)

Skit
fonte
-7

Função nativa PHP existe para isso. Veja http://php.net/manual/en/function.reset.php

Simplesmente faça o seguinte: mixed reset ( array &$array )

William Espindola
fonte
4
Por favor, leia o manual ao qual você está vinculando; resetfaz outra coisa.
deceze
É apenas mover o ponteiro para o primeiro elemento da matriz. Iniciador de tópicos pesquisando maneira de soltar chaves no estado padrão 0, 1, 2 ... N.
SlowSuperman