2012-02-14 43 views
7

Với một mảng nhưPHP đa chiều Mảng - Tìm kiếm giá trị và được các tiểu mảng

$clusters = array(
"clustera" => array(
    '101', 
    '102', 
    '103', 
    '104' 
), 
"clusterb" => array(
    '201', 
    '202', 
    '203', 
    '204' 
), 
"clusterc" => array(
    '301', 
    '302', 
    '303', 
    '304' 
) 
); 

Làm thế nào tôi có thể tìm kiếm một máy chủ (ví dụ 202) và nhận được trở lại đó là cụm? tức là tìm kiếm 202 và câu trả lời là "clusterb" tôi đã thử sử dụng array_search nhưng có vẻ như chỉ dành cho các mảng một chiều phải không? (ví dụ: phàn nàn rằng đối số thứ hai là sai số liệu nếu tôi cung cấp cho nó cụm $)

Rất cám ơn!

Trả lời

10
$search=202; 

$cluster=false; 

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

echo $cluster; 
+0

điều gì đó sôi nổi đang diễn ra. Dường như bạn bỏ lỡ một cú đúp hoặc một cái gì đó anfd tôi đã cố gắng để làm sạch nhưng không thể làm cho nó hoạt động. \t \t \t $ search = $ server; \t \t \t $ cluster = false; (Cụm $ như $ n => $ c) \t \t \t foreach { \t \t \t if (in_array ($ tìm kiếm, $ c)) { \t \t \t $ cụm = $ n; \t \t \t ngắt; \t \t \t} \t \t \t} \t \t \t print ("Phương pháp 2 có:" $ cụm); – Seer

+0

Chỉ cần kiểm tra mã của tôi ở đây, hoạt động như mong đợi. Mã của bạn sai ở dòng cuối cùng, 'print (" phương thức 2 nhận: "$ cluster);' nên là 'print (" phương thức 2 có: $ cluster ");' –

+0

Hoàn toàn đúng ... nhưng thậm chí không vấn đề .... Tôi đã thử nghiệm với 202 khi trong thực tế, tôi giấu tên máy chủ REAL từ ví dụ để bảo vệ người vô tội :) Hoạt động tuyệt vời! – Seer

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

hmm tôi nhận được "lập luận hợp lệ cung cấp cho foreach()", đó là sự xấu hổ vì nó có vẻ như nó sẽ được chính xác những gì tôi cần :) – Seer

+0

$ cụm sẽ cần phải được định nghĩa là mảng cụm của bạn như trong câu hỏi –

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

Hãy thử sử dụng chức năng này. Nó trả về khóa của $ kim (202) trong các mảng con ngay lập tức của $ haystack (cluster). Không kiểm tra, vì vậy cho tôi biết nếu làm việc này

+0

Cái này không hoàn toàn hoạt động ... hoặc là trống rỗng. Sự thay đổi duy nhất tôi đã thực hiện là ném niềng răng xung quanh nội dung của hàm. function array_multi_search ($ needle, $ haystack) { \t foreach ($ haystack as $ key => $ data) { \t \t nếu (in_array ($ needle, $ data)) trả về $ key; \t} } – Seer

+0

xin lỗi về lỗi đánh máy. Điều này hoạt động ngay bây giờ. http://codepad.org/cnACdlFI –

+0

chắc chắn không - cảm ơn! – Seer

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

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

$clusterX = array_search($clusterSubArr, $cluster); 
Các vấn đề liên quan