2 votes

Comment obtenir un tableau spécifique avec une paire clé/valeur spécifique, à partir d'un tableau multidimensionnel ?

En PHP si j'ai un tableau multidimensionnel comme ceci, comment puis-je obtenir le seul tableau qui a la clé highlight = 1, sans utiliser foreach, for, ou n'importe quel type de boucle ? est-ce possible ?

array(
array(
    [id] => xxx,
    [name] => blah,
    [highlight] => 0

),
array(
    [id] => yyy,
    [name] => blahblah,
    [highlight] => 1
),
array(
    [id] => zzz,
    [name] => blahblahblah,
    [highlight] => 0
),
)

merci

5voto

billyonecan Points 10354

Sauf erreur de ma part, ce n'est pas possible sans effectuer une sorte de boucle. La meilleure solution à laquelle je peux penser serait d'utiliser array_filter() Cependant, cela revient essentiellement à faire des boucles :

$theArray = array_filter($array, function($v) { return $v['highlight'] == 1; });

2voto

Baba Points 49157

Vous ne devez pas avoir peur des boucles car presque toutes les fonctions que vous pouvez utiliser dans ce cas utilisent des boucles ( arrap_map , array_reduce , array_walk etc) .... etc.

Pour le plaisir, vous pouvez essayer goto :D

START: // your array
O1: $num = - 1; $found = array(); $total = count($array);
O2: $num ++;
O3: if ($num >= $total) goto O6;
O4: if ($array[$num]['highlight'] == 1) $found[] = $array[$num];
O5: goto O2;
O6: print_r($found);
END:

Voir la démonstration en direct de son fonctionnement

1voto

hakre Points 102271

Vous devez saisir le tableau différemment si vous ne voulez pas utiliser une boucle, mais la table de hachage que PHP propose d'emblée pour les tableaux.

1voto

Don Points 11
$json = (json_encode($array));
if (stripos($json,'"highlight":"1"')){
    echo "exists";
}else{ 
echo "doesn't";
}

Assez rapide, pas de boucles, simple...cependant, il vous dira seulement si ce que vous avez recherché existe. Peut être étendu pour obtenir id & name et reconverti en tableau.

J'espère que cela aidera quelqu'un d'autre.

0voto

LeonardChallis Points 3747

Une alternative à la réponse correcte de billyonecan serait de retourner un index à votre tableau au lieu de faire une copie du tableau, comme suit :

<?php

$test = array(
  array(
    'id' => xxx,
    'name' => blah,
    'highlight' => 0

  ),
  array(
    'id' => yyy,
    'name' => blahblah,
    'highlight' => 1
  ),
  array(
    'id' => zzz,
    'name' => blahblahblah,
    'highlight' => 0
  ),
);

$myKey = null;

array_walk($test, function(&$item1, $key) {
  global $myKey;
  if ($item1['highlight'] == 1) {
    $myKey = $key;
  }
});

var_dump($test[$myKey]);
// array(3) { ["id"]=> string(3) "yyy" ["name"]=> string(8) "blahblah" ["highlight"]=> int(1) }

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X