Pergunta

Quero fazer algo aparentemente muito simples, mas não consigo encontrar nada sobre isso:simplesmente extraia um subconjunto de um array semelhante a array_splice, mas usando chaves para recuperar os valores :

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
              /* many more data I don't need here ... */);

list($name, $age, $id) = array_splice_by_keys($data,
                          array('personName', 'personAge', 'personId');

Se tudo mais falhar, não existe uma função interna para filtrar uma matriz associativa por chaves?Por exemplo:

$filteredArray = array__extract__keys__and__values($srcArray, $arrayOfWantedKeys);

// create a new array with ONLY those key => values I need
$wanted_values = array_extract_keys_and_values($data,
                  array('personName', 'personAge', 'personId');

echo $wanted_values['personName'];  

Acho que a razão pela qual quero fazer o primeiro é que não gosto de repetir o acesso ao array associativo em todo o meu código, pareceria melhor otimizado copiar os valores que são muito usados ​​​​(em um loop, por exemplo ), em uma variável local, além de ser muito mais fácil digitar $name do que $somearray['name'].

EDITAR:Obrigado, acho que para usar com lista, a solução seria

list($x, $y, $z) = array_values(array_intersect_key($array, array_flip($wantedKeys)));

Uso interessante de array_flip!

Foi útil?

Solução

na versão php >= 5.1.0 você poderia usar array_intersect_key:

$data = array('personName' => 'John', 'personAge' => 99, 'personId' => 1,  
          'test' => 23);
$ex = array('personName'=>0, 'personAge'=>0, 'personId'=>0);
var_dump(array_intersect_key($data, $ex));

valores em $ex não importa, eles apenas precisam estar presentes.

Outras dicas

Isso é essencialmente o mesmo que a resposta do SilentGhost, mas pode ser mais fácil e provavelmente um pouco mais lento.

array_intersect_key($array, array_flip($wantedKeys));
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top