Cerca i valori nell'arrays nidificato

Ho una matrix come segue

arrays(2) { ["operator"] => arrays(2) { ["qty"] => int(2) ["id"] => int(251) } ["accessory209"] => arrays(2) { ["qty"] => int(1) ["id"] => int(209) } ["accessory211"] => arrays(2) { ["qty"] => int(1) ["id"] => int(211) } } 

Sto cercando di trovare un modo per verificare che esista un valore id all'interno dell'arrays e restituisca bool. Sto cercando di capire un modo rapido che non richiede la creazione di un ciclo. L'uso della function in_arrays non ha funzionato, e ho anche letto che è piuttosto lento.

Nel manuale php qualcuno ha consigliato di usare flip_arrays () e quindi isset (), ma non riesco a farlo funzionare per un arrays 2-d.

fare qualcosa del genere

 if($arrays['accessory']['id'] == 211) 

avrebbe funzionato anche per me, ma ho bisogno di abbinare tutti i tasti contenenti accessori – non so come farlo

Ad each modo, sto girando in tondo, e potrei usare un po 'di aiuto. Sembra che dovrebbe essere facile. Grazie.

Ciao dardub, puoi usare arrays_walk per verificare se un determinato valore è all'interno dell'arrays – arrays_walk esegue iterazioni con tutti gli elementi dell'arrays e applica loro una function fornita, quindi in pratica devi creare quella function. È usato come segue:

 $arr = arrays( 'one' => arrays('id' => 1), 'two' => arrays('id' => 2), 'three' => arrays('id' => 3) ); function checkValue($value, $key) { echo $value['id']; } arrays_walk($arr, 'checkValue'); 

Dovrai solo aggiungere alla tua function qualsiasi condizionale / validation di cui avresti bisogno.

Spero che sia d'aiuto.

M.

EDIT: documenti PHP su arrays_walk http://www.php.net/manual/en/function.arrays-walk.php

Questa function è utile in_arrays(211, $arrays['accessory']); Verifica l'integer arrays specificato per vedere se il valore esiste e restituisce true.

in_arrays

 $map = arrays(); foreach ($arr as $v) { $map[$v['id']] = 1; } //then you can just do this as when needed $exists = isset($map[211]); 

O se hai bisogno dei dati ad esso associati

 $map = arrays(); foreach ($arr as $k => $v) { $map[$v['id']][$k] = $v; } print_r($map[211]); 
 <?php //PHP 5.3 way to do it function searchNestedArray(arrays $arrays, $search, $mode = 'value') { foreach (new RecursiveIteratorIterator(new RecursiveArrayIterator($arrays)) as $key => $value) { if ($search === ${${"mode"}}) return true; } return false; } $data = arrays( arrays('abc', 'ddd'), 'ccc', 'bbb', arrays('aaa', arrays('yyy', 'mp' => 555)) ); var_dump(searchNestedArray($data, 555)); 

Ho usato un metodo statico perché ne avevo bisogno in una class, ma se vuoi puoi usarlo come una semplice function.

 /** * Given an arrays like this * arrays( * 'id' => "first", * 'title' => "First Toolbar", * 'class' => "col-md-12", * 'items' => arrays( * arrays( * 'tipo' => "clientLink", * 'id' => "clientLinkInsert" * ) * ) * ) * * and arrays search like this * arrays("items", 0, "id") * * Find the path described by the arrays search, in the original arrays * * @param arrays $arrays source arrays * @param arrays $search the path to the item es. ["items", 0, "tipo"] * @param null|mixed $defaultIfNotFound the default value if the value is not found * * @return mixed */ public static function getNestedKey($arrays, $search, $defaultIfNotFound = null) { if( count($search) == 0 ) return $defaultIfNotFound; else{ $firstElementSearch = self::arrays_kshift($search); if (arrays_key_exists($firstElementSearch, $arrays)) { if( count($search) == 0 ) return $arrays[$firstElementSearch]; else return self::getNestedKey($arrays[$firstElementSearch], $search, $defaultIfNotFound); }else{ return $defaultIfNotFound; } } }