ti-enxame.com

Pode listar () nos últimos PHP trabalhar com matrizes associativas de alguma forma?

Exemplo:

list($fruit1, $fruit2) = array('apples', 'oranges');

código acima, é claro, funciona bem, mas código abaixo:

list($fruit1, $fruit2) = array('fruit1' => 'apples', 'fruit2' => 'oranges');

dá: Notice: Undefined offset: 1 in....

Existe alguma maneira de se referir a teclas nomeadas de alguma forma com lista como list('fruit1' : $fruit1), você viu algo assim planejado para lançamento futuro?

39
rsk82

EDIT: Essa abordagem foi útil no passado (foi literalmente solicitada uma resposta há mais de sete anos), mas veja a resposta da K-Gun abaixo para obter uma melhor abordagem com a nova sintaxe PHP 7+ sintaxe.

Experimente a função extract() . Ele criará variáveis ​​de todas as suas chaves, atribuídas aos seus valores associados:

extract(array('fruit1' => 'apples', 'fruit2' => 'oranges'));
var_dump($fruit1);
var_dump($fruit2);
43
landons

Com/de PHP 7.1 ;

$array = ['fruit1' => 'Apple', 'fruit2' => 'orange'];

// [] style
['fruit1' => $fruit1, 'fruit2' => $fruit2] = $array;

// list() style
list('fruit1' => $fruit1, 'fruit2' => $fruit2) = $array;

print $fruit1; // Apple
58
K-Gun

Que tal usar array_values ​​()?

<?php
   list($fruit1, $fruit2) = array_values( array('fruit1'=>'apples','fruit2'=>'oranges') );
?>
43
Broom

Se você estiver no meu caso:

list () funciona apenas em matriz numérica. Portanto, se você puder, deixando em branco em fetch () ou fetchAll () -> deixe que ele tenha 2 opções: matriz numérica e matriz associativa. Vai funcionar.

1
Trung Phạm

É bem simples de implementar.

function orderedValuesArray(array &$associativeArray, array $keys, $missingKeyDefault = null)
{
    $result = [];
    foreach ($keys as &$key) {
        if (!array_key_exists($key, $associativeArray)) {
            $result[] = $missingKeyDefault;
        } else {
            $result[] = $associativeArray[$key];
        }
    }
    return $result;
}
$arr = [
    'a' => 1,
    'b' => 2,
    'c' => 3
];
list($a, $b, $c) = orderedValuesArray($arr, ['a','AAA', 'c', 'b']);
echo $a, ', ', $b, ', ', $c, PHP_EOL;

saída: 1, , 3

  • menos digitação no lado do uso
  • nenhum elemento depende da ordem (ao contrário de array_values)
  • controle direto sobre nomes de variáveis ​​(ao contrário de extract) - menor risco de colisão de nomes, melhor suporte para IDE
0
Alexander Malakhov