web-dev-qa-db-fra.com

Premier élément de matrice par condition

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:

  1. Itérer sur le tableau, vérifier la condition et la pause lorsqu'il est trouvé

  2. 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?

8
simon.ro

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.

0
Stender