Extraire la clé et la valeur d'un tableau associatif en PHP

soyons un tableau associatif en PHP, j'ai besoin d'en extraire le premier élément, à la fois la valeur et la clé.

je voudrais utiliser

value1=array_pop(S);

mais ça ne me donne que la valeur.

je peux utiliser

K=array_keys(S);
key1=array_pop(K);
value1=array_pop(S);

mais c'est compliqué parce qu'il faut avoir deux copies des mêmes données. Ce qui est déroutant puisque le tableau est lui-même un élément dans un tableau de tableaux. Il doit y avoir une façon plus élégante de lire le couple clé/valeur lors de l'extraction.

19
demandé sur Pietro Speroni 2011-07-07 14:09:31

4 réponses

$value = reset($arr);
$key = key($arr);

(dans cet ordre)

Voir reset() manuel PHP, key() manuel PHP.

unset($arr[$key]); # in case you want to remove it.

cependant array_pop() manuel PHP fonctionne avec le dernier élément:

$value = end($arr);
$key = key($arr);
unset($arr[$key]); # in case you want to remove it.

Voir end() manuel PHP.

pour le amusant:

list($value, $key) = array(end($arr), key($arr));

ou

extract(array('value'=>end($arr), 'key'=>key($arr)));

ou

end($arr);
list($key, $value) = each($arr);

ou quelque soit le style de jeu que vous aimez ;)

gestion des matrices vides

il manquait jusqu'à présent pour traiter les tableaux vides. Il est donc nécessaire de vérifier s'il y a un dernier (premier) élément et si ce n'est pas le cas, définissez le $keynull (null ne peut pas être une clé du tableau):

for($key=null;$key===null&&false!==$value=end($arr);)
    unset($arr[$key=key($arr)]);

Cela donnera pour un tableau rempli comme $arr = array('first' => '1st', 'last' => '2nd.');:

string(4) "2nd." # value
string(4) "last" # key
array(1) { # leftover array
  ["first"]=>
  string(3) "1st"
}

Et un tableau vide:

bool(false) # value
NULL # key
array(0) { # leftover array
}

vous avez peur de vous servir de unset?

Dans le cas où vous n'avez pas confiance unset() ayant la performance dont vous avez besoin (dont je ne pense pas que ce soit vraiment un problème, même si je n'ai pas exécuté de métrique), vous pouvez utiliser le natif array_pop() implémentation aussi (mais je pense vraiment que unset() comme un langage de construction peut être même plus rapide):

end($arr);
$key = key($arr);
$value = array_pop($arr);
34
répondu hakre 2011-07-07 12:32:36

array_slice

$arr = array('k1' => 'v1', 'k2' => 'v2', 'k3' => 'v3');

$a = array_slice($arr, 0, 1);
var_dump($a);

$arr = array_slice($arr, 1);
var_dump($arr);


array(1) {
  ["k1"]=>
  string(2) "v1"
}
array(2) {
  ["k2"]=>
  string(2) "v2"
  ["k3"]=>
  string(2) "v3"
}
6
répondu OZ_ 2011-07-07 10:16:39
$value = reset($array);
$key = key($array);

Edit: Hakre juste me battre pour elle :-)

3
répondu Sander Marechal 2011-07-07 10:13:52
list($value, $key) = array(reset($s), key($s));
array_shift($s); // or just unset($s[$key]);

bien sûr, vous pouvez séparer la première déclaration en deux.

2
répondu KingCrunch 2011-07-07 10:12:53