2012-02-14 62 views
7

鑑於像PHP多維數組 - 查找值並獲得子陣列

$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,如果我給它$簇)

非常感謝!

回答

10
$search=202; 

$cluster=false; 

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

echo $cluster; 
+0

中的羣集數組。看起來你錯過了一個支架或一些東西,我試圖清理,但無法使它工作。 \t \t \t $ search = $ server; \t \t \t $ cluster = false; \t \t \t的foreach($簇$ N => $ C){ \t \t \t如果(in_array($搜索,$ C)){ \t \t \t $簇= $ N; \t \t \t break; \t \t \t} \t \t \t} \t \t \t打印( 「方法2得到:」 $簇); – Seer 2012-02-14 12:34:01

+0

剛剛在這裏檢查了我的代碼,按預期工作。你的代碼在最後一行是錯誤的,'print(「method 2 got:」$ cluster);'應該是'print(「method 2 got:$ cluster」);' – 2012-02-14 12:37:20

+0

絕對正確......但即使那樣問題....我用202測試時,實際上我從示例中隱藏了REAL服務器名稱以保護無辜:)工程太棒了! – Seer 2012-02-14 12:45:07

0
function getCluster($val) { 
    foreach($clusters as $cluster_name => $cluster) { 
     if(in_array($val, $cluster)) return $cluster_name; 
    } 
    return false; 
} 
+0

嗯,我得到這是恥辱,因爲它看起來像它會正是我需要的:) – Seer 2012-02-14 12:28:04

+0

$集羣需要「爲的foreach()提供的無效參數」被定義爲問題 – 2012-02-15 09:32:14

2
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]; 

嘗試使用此功能。它在$ haystack(cluster)的直接子數組中返回$ needle(202)的鍵。沒測試過,所以讓我知道,如果這個工程

+0

這個不太合適,......空着。我所做的唯一改變是在函數的內容周圍加上大括號。函數array_multi_search($ needle,$ haystack){ \t foreach($ haystack as $ key => $ data){ \t \t if(in_array($ needle,$ data))return $ key; \t} } – Seer 2012-02-14 12:40:29

+0

抱歉,錯字。這現在起作用。 http://codepad.org/cnACdlFI – 2012-02-14 12:44:51

+0

肯定會 - 謝謝! – Seer 2012-02-14 13:11:53

1
$arrIt = new RecursiveArrayIterator($cluster); 
$server = 202; 

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

$clusterX = array_search($clusterSubArr, $cluster);