PHP - Find a value or a key in an array of nested arrays - Trouver une valeur ou une clé dans un tableau de tableaux imbriqués
Publié le .
[EN] It can be convenient to test if a value already belongs to an array among other nested arrays. To do this, we would be tempted to loop through all our arrays and find the value we are looking for, if it exists. One way to do this is to use PHP's native in_array() function, but it doesn't work on nested arrays... We will then give it as a search array an array sorted by the native array_column() function. We can search if a value belongs to a set of nested arrays. We can also retrieve the key of the array to which this value belongs, this is interesting to update a value in an array without looping through all the nested arrays. [FR] Il peut être pratique de tester si une valeur appartient déjà à un tableau parmi d'autres tableaux imbriqués. Pour faire cela, nous serions tentés de faire une boucle parmi tous nos tableaux et de trouver la valeur recherchée, si elle existe. Un moyen de faire cela est d'employer la fonction native in_array() de PHP or elle ne fonctionne pas sur des tableaux imbriqués ... Nous lui donnerons alors comme tableau de recherche un tableau trié par la fonction native array_column(). Nous pouvons rechercher si une valeur appartient à un ensemble de tableaux imbriqués. Nous pouvons aussi récupérer la clé du tableau à qui appartient cette valeur, ceci est intéressant pour mettre à jour une valeur dans un tableau sans boucler à travers tous les tableaux imbriqués.
// make nested arrays
$ARRAYS[] = array(
'article_id' => 15,
'title' => 'Article 1',
'nb_visits' => 1
);
$ARRAYS[] = array(
'article_id' => 16,
'title' => 'Article 2',
'nb_visits' => 1
);
$ARRAYS[] = array(
'article_id' => 18,
'title' => 'Article 3',
'nb_visits' => 1
);
// test - Modify number of id for render test
$article_id = 15;
if( !in_array( $article_id, array_column( $ARRAYS, 'article_id' ) ) ){
echo 'Article id : '.$article_id.' is not on array';
}
else{
echo 'Article id : '.$article_id.' is on array';
$key = array_search( $article_id, array_column( $ARRAYS, 'article_id' ) );
print_r("\r\n".'His index array is : '.$key);
}
// output :
// Article id : 15 is on array
// His index array is : 0
// if we modifiy article id : ex. $article_id = 14;
// output :
// Article id : 14 is not on array
Mots clés : php, nested arrays, find key on nested arry, find value on nested array