Come usare PHP in_arrays con arrays associativo?

Esiste qualche function PHP come in_arrays per gli arrays associativi ottenuti dalla function mysql "mysql_fetch assoc"?

Ad esempio, se ho un $ arrays che assomiglia a questo:

arrays(0=>(arrays(ID=>1, name=>"Smith"), 1=>(arrays(ID=>2, name=>"John")) 

Posso fare qualcosa come in_arrays(key,value,arrays)?

O nel mio caso, se sto cercando il valore ID di "1", in_arrays("ID",1,$arrays) .

Questa è la mia soluzione, commentala se pensi che sia la strada giusta:

 function in_assoc_arrays($key,$value,$arrays) { if (empty($arrays)) return false; else { foreach($arrays as $a) { if ($a[$key] == $value) return true; } return false; } } 

Prova questo … Puoi usare questa function per qualsiasi profondità dell'arrays associato. Contrapporre a questa function è che il valore della chiave non dovrebbe essere ripetuto in un punto qualsiasi della matrix.

 <?php function is_in_arrays($arrays, $key, $key_value){ $within_arrays = 'no'; foreach( $arrays as $k=>$v ){ if( is_arrays($v) ){ $within_arrays = is_in_arrays($v, $key, $key_value); if( $within_arrays == 'yes' ){ break; } } else { if( $v == $key_value && $k == $key ){ $within_arrays = 'yes'; break; } } } return $within_arrays; } $test = arrays( 0=> arrays('ID'=>1, 'name'=>"Smith"), 1=> arrays('ID'=>2, 'name'=>"John") ); print_r(is_in_arrays($test, 'name', 'Smith')); ?> 

Nel tuo caso, mi chiedo se usare semplicemente isset () abbia più senso, ad es

 isset($a[$key]) 

Non puoi farlo direttamente su arrays annidati. Devi nidificare un po 'e poi farlo.

 <?php $arr=arrays(0=>arrays('ID'=>1, 'name'=>"Smith"), 1=>arrays('ID'=>2, 'name'=>"John")); foreach($arr as $arr1) { if(in_arrays(1,$arr1)) { echo "Yes found.. and the correspoding key is ".key($arr1)." and the employee is ".$arr1['name']; } } 

OUTPUT :

 Yes found.. and the correspoding key is ID and the employee is Smith 

Per prima cosa devi sapere quale parte dell'arrays associativo utilizzerai come pagliaio nella function in_arrays . Quindi puoi usare in_arrays senza codice aggiuntivo.

Esempio con valori:

 <?php $assoc = arrays(1 => "apple", 2 => "banana", 3 => "lemon", 4 => "pear"); $haystack = arrays_values($assoc); echo "<p>" . print_r($assoc, true) . "</p>"; $needle = 'banana'; $find = (in_arrays($needle, $haystack)) ? 'TRUE' : 'FALSE'; echo "<p>$needle : $find</p>"; $needle = 'cherry'; $find = (in_arrays($needle, $haystack)) ? 'TRUE' : 'FALSE'; echo "<p>$needle : $find</p>"; ?> 

Risultati in:

 Array ( [1] => apple [2] => banana [3] => lemon [4] => pear ) banana : TRUE cherry : FALSE 

Il formule di esempio, usando class e methods:

 class VerifyInArray { public function getMyCollection($field, $collection) { $list = arrays(); if (count($collection)) { foreach ($collection as $k => $val) { $list[] = $val[$field]; } } return $list; } public function inMyArray($collection, $field, $findValue) { if (isset($collection[0])) { if (arrays_key_exists($field, $collection[0]) == false) { return 'no'; } } if (in_arrays($findValue, $this->getMyCollection($field, $collection))) { return 'ok'; } return 'no'; } public function displayInArray($collection, $attr, $value) { return 'search result: '. $this->inMyArray($collection, $attr, $value); } } $src = new VerifyInArray(); $collection = arrays( arrays( 'ID' => 1, 'name' => 'Smith' ), arrays( 'ID' => 2, 'name' => 'John' ) ); echo $src->displayInArray($collection, 'ID', 2). "\n<br>" . $src->displayInArray($collection, 'ID', 0); 

Modello in ideone