Учитывая массив, подобный
$clusters = array( "clustera" => array( '101', '102', '103', '104' ), "clusterb" => array( '201', '202', '203', '204' ), "clusterc" => array( '301', '302', '303', '304' ) );
Как я могу найти сервер (например, 202) и вернуть его кластер? т.е. поиск 202, а ответ – «clusterb». Я попытался использовать array_search, но кажется, что это справедливо только для одномерных массивов? (т. е. жалуется, что второй аргумент неправильный dataype, если я даю ему $ clusters)
Большое спасибо!
$search=202; $cluster=false; foreach ($clusters as $n=>$c) if (in_array($search, $c)) { $cluster=$n; break; } echo $cluster;
function array_multi_search($needle,$haystack){ foreach($haystack as $key=>$data){ if(in_array($needle,$data)) return $key; } } $key=array_multi_search(202,$clusters); echo $key; $array=$clusters[$key];
Попробуйте использовать эту функцию. Он возвращает ключ $ needle (202) в непосредственных дочерних массивах $ haystack (cluster). Не проверено, так что дайте мне знать, если это работает
$arrIt = new RecursiveArrayIterator($cluster); $server = 202; foreach ($arrIt as $sub){ if (in_array($server,$sub)){ $clusterSubArr = $sub; break; } } $clusterX = array_search($clusterSubArr, $cluster);
function getCluster($val) { foreach($clusters as $cluster_name => $cluster) { if(in_array($val, $cluster)) return $cluster_name; } return false; }