Есть ли какая-либо функция php, такая как in_array для ассоциативных массивов, которые вы получаете с помощью функции mysql «mysql_fetch assoc»?
Например, если у меня есть массив $, который выглядит так:
array(0=>(array(ID=>1, name=>"Smith"), 1=>(array(ID=>2, name=>"John"))
Могу ли я сделать что-то вроде in_array(key,value,array)?
Или в моем случае, если я ищу значение идентификатора «1», in_array("ID",1,$array)
.
Это мое решение, прокомментируйте это, если вы считаете, что это правильный путь:
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; } }
Попробуйте это ….. Вы можете использовать эту функцию для любой глубины связанного массива. Просто противопоставление этой функции заключается в том, что значение ключа не будет повторяться в массиве.
<?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')); ?>
В вашем случае, интересно, просто ли использование isset () имеет больше смысла, т.е.
isset($a[$key])
Вы не можете сделать это непосредственно на вложенных массивах. Вам нужно немного вложить его в него, а затем сделать это.
<?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
Сначала вы должны знать, какую часть ассоциативного массива вы собираетесь использовать в качестве стога сена в функции in_array
. Затем вы можете использовать in_array
без дополнительного кода.
Пример со значениями:
<?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>"; ?>
Результаты в:
Array ( [1] => apple [2] => banana [3] => lemon [4] => pear ) banana : TRUE cherry : FALSE
Образец формы, используя класс и методы:
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);
Модель в идеоне