PHP Многомерный массив - поиск значения и получение подмассива - PullRequest
8 голосов
/ 14 февраля 2012

Учитывая массив как

$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, но кажется, что это только для одномерных массивов, верно? (то есть жалуется, что второй аргумент неверен, если я дам ему $ кластеров)

Большое спасибо!

Ответы [ 4 ]

11 голосов
/ 14 февраля 2012
$search=202;

$cluster=false;

foreach ($clusters as $n=>$c)
  if (in_array($search, $c)) {
    $cluster=$n;
    break;
  }

echo $cluster;
2 голосов
/ 14 февраля 2012
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).Не проверено, поэтому дайте мне знать, если это работает

1 голос
/ 31 января 2013
$arrIt = new RecursiveArrayIterator($cluster);
$server = 202;

foreach ($arrIt as $sub){
    if (in_array($server,$sub)){
        $clusterSubArr = $sub;
        break;
        }
    }

$clusterX = array_search($clusterSubArr, $cluster);
0 голосов
/ 14 февраля 2012
function getCluster($val) {
   foreach($clusters as $cluster_name => $cluster) {
      if(in_array($val, $cluster)) return $cluster_name;
   }
   return false;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...