valor multidimensional in_array buscar array php search associative-array

multidimensional - in_array php



¿Cómo usar PHP in_array con array asociativo? (5)

No puede hacerlo directamente en matrices anidadas. Necesita anidar un poco y luego hacerlo.

<?php $arr=array(0=>array(''ID''=>1, ''name''=>"Smith"), 1=>array(''ID''=>2, ''name''=>"John")); foreach($arr as $arr1) { if(in_array(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

¿Hay alguna función php como in_array para matrices asociativas que obtienes por la función mysql "mysql_fetch assoc"?

Por ejemplo, si tengo un $ array que se ve así:

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

¿Puedo hacer algo como in_array(key,value,array)?

O en mi caso, si estoy buscando el valor de ID de "1", in_array("ID",1,$array) .

Esta es mi solución, coméntala si crees que es la correcta:

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


Pruebe esto ..... Puede usar esta función para cualquier profundidad de la matriz asociada. Solo de acuerdo con esta función, el valor de la clave no se repetirá en ningún lugar del conjunto.

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


Primero debe saber qué parte de la matriz asociativa va a usar como pajar en la función in_array . Entonces puedes usar in_array sin código adicional.

Ejemplo con valores:

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

Resultados en:

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


En su caso, me pregunto si simplemente usar isset () tiene más sentido, es decir,

isset($a[$key])


La fórmula de muestra, usando clase y métodos:

class VerifyInArray { public function getMyCollection($field, $collection) { $list = array(); if (count($collection)) { foreach ($collection as $k => $val) { $list[] = $val[$field]; } } return $list; } public function inMyArray($collection, $field, $findValue) { if (isset($collection[0])) { if (array_key_exists($field, $collection[0]) == false) { return ''no''; } } if (in_array($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 = array( array( ''ID'' => 1, ''name'' => ''Smith'' ), array( ''ID'' => 2, ''name'' => ''John'' ) ); echo $src->displayInArray($collection, ''ID'', 2). "/n<br>" . $src->displayInArray($collection, ''ID'', 0);

Modelo en ideone