Si vous avez quelque chose comme ça :
$stuff = array();
$stuff[0] = array('story' => 'A story', 'message' => 'in a bottle');
$stuff[1] = array('story' => 'Foo');
Vous pourriez simplement count()
:
foreach ($stuff as $value) {
if (count($value) == 2) {
// story and message
} else {
// only story
}
}
Cela ne fonctionne que si vous êtes certain de n'avoir QUE ces clés de tableau, et rien d'autre.
L'utilisation de array_key_exists() ne permet de vérifier qu'une clé à la fois, vous devrez donc vérifier les deux séparément :
foreach ($stuff as $value) {
if (array_key_exists('story', $value) && array_key_exists('message', $value) {
// story and message
} else {
// either one or both keys missing
}
}
array_key_exists()
retourne vrai si la clé est présente dans le tableau, mais c'est une vraie fonction et beaucoup à taper. La construction du langage isset()
fera presque la même chose, sauf si la valeur testée est NULL :
foreach ($stuff as $value) {
if (isset($value['story']) && isset($value['message']) {
// story and message
} else {
// either one or both keys missing
}
}
De plus, isset permet de vérifier plusieurs variables à la fois :
foreach ($stuff as $value) {
if (isset($value['story'], $value['message']) {
// story and message
} else {
// either one or both keys missing
}
}
Maintenant, pour optimiser le test pour les éléments qui sont définis, il vaut mieux utiliser ce "si" :
foreach ($stuff as $value) {
if (isset($value['story']) {
if (isset($value['message']) {
// story and message
} else {
// only story
}
} else {
// No story - but message not checked
}
}