Je cherche un moyen élégant d'obtenir le premier (et seulement le premier) élément d'un tableau qui satisfait une condition donnée.
exemple simple :
Saisir:
[
['value' => 100, 'tag' => 'a'],
['value' => 200, 'tag' => 'b'],
['value' => 300, 'tag' => 'a'],
]
État: $element['value'] > 199
Production attendue:
['value' => 200, 'tag' => 'b']
J'ai moi-même trouvé plusieurs solutions moi-même:
Itérer sur le tableau, vérifier la condition et la pause lorsqu'il est trouvé
Utilisez Array_Filter pour appliquer la condition et prenez la première valeur de filtrée:
array_values(
array_filter(
$input,
function($e){
return $e['value'] >= 200;
}
)
)[0];
Les deux semblent un peu lourds. Est-ce que quelqu'un a une solution plus propre? Est-ce que je manque une fonction PHP intégrée?
Votre tableau:
$array = [
['value' => 100, 'tag' => 'a'],
['value' => 200, 'tag' => 'b'],
['value' => 300, 'tag' => 'a'],
];
Pour trouver les entrées via des conditions, vous pouvez le faire.
$newArray = array_values(array_filter($array, function($n){ return $n['value'] >= 101 && $n['value'] <= 400; }));
Avec cela, vous pouvez définir des valeurs, des chiffres min et max.
si vous voulez seulement définir un nombre min, vous pouvez omettre le max comme celui-ci.
$arrayByOnlyMin = array_values(array_filter($array, function($n){ return $n['value'] >= 199; }));
Cela reviendrait:
array(2) {
[0]=>
array(2) {
["value"]=>
int(200)
["tag"]=>
string(1) "b"
}
[1]=>
array(2) {
["value"]=>
int(300)
["tag"]=>
string(1) "a"
}
}
alors appeler $arrayByOnlyMin[0]
vous donnerait la première entrée, qui correspond à votre condition min.