2010-12-17 63 views
2

我想在多維數組中搜索關鍵字,我想獲得與該關鍵字相關的corrosponding值。 例如 我想從下面的陣列中提取以下文字:在數組中搜索關鍵字並返回它的值?

SENT AT 12.08ms 

而後面的文本

sample id 41962 

是一個數組的print_r()輸出:

Array 
(
     [0] => Array 
       (
        [VERSION] => Array 
         (
          [0] => Array 
           (
            [group] => 
            [param] => Array 
             (
             ) 

            [value] => Array 
             (
              [0] => Array 
               (
                [0] => 3.0 
               ) 

             ) 

           ) 

         ) 

        [SAMPLE] => Array 
         (
          [0] => Array 
           (
            [group] => 
            [param] => Array 
             (
             ) 

            [value] => Array 
             (
              [0] => Array 
               (
                [0] => sample id 41962 
               ) 

             ) 

           ) 

         ) 

        [TSAM] => Array 
         (
          [0] => Array 
           (
            [group] => 
            [param] => Array 
             (
             ) 

            [value] => Array 
             (
              [0] => Array 
               (
                [0] => sample group 141 
               ) 

              [1] => Array 
               (
                [0] => ¯ 
               ) 

              [2] => Array 
               (
                [0] => sample batch 81 
               ) 

              [3] => Array 
               (
                [0] => 
               ) 

              [4] => Array 
               (
                [0] => 
               ) 

             ) 

           ) 

         ) 

        [STATUS] => Array 
         (
          [0] => Array 
           (
            [group] => 
            [param] => Array 
             (
              [TYPE] => Array 
               (
                [0] => CART 
               ) 

             ) 

            [value] => Array 
             (
              [0] => Array 
               (
                [0] => SENT AT 12.08ms 
               ) 

             ) 

           ) 

         ) 

       ) 
)   

有人可以給我提供了優化上述問題的代碼。多維數組包含超過5000到10000個數組。

+0

我知道它是一個數組的數組,但每個單獨的sub_array結構相同嗎? – dkinzer 2010-12-17 02:09:55

回答

2

如果所有的數組鍵具有相同的結構下面的代碼應該工作:

foreach($array as $item){ 
    $sentat = $item['STATUS'][0]['value'][0][0]; 
    $sample = $item['SAMPLE'][0]['value'][0][0]; 
} 

更多詳細信息將幫助我們爲您提供更多提示:)

+0

謝謝你的回覆..我非常感謝!它不能解決問題。我正在尋找更廣泛的解決方案。 – 2010-12-17 03:13:14

3

請看看我的功能,爲你的作品:

function get_value_by_key($array,$key) 
{ 
foreach($array as $k=>$each) 
{ 
    if($k==$key) 
    { 
    return $each; 
    } 

    if(is_array($each)) 
    { 
    if($return = get_value_by_key($each,$key)) 
    { 
    return $return; 
    } 
    } 

} 

} 

用途:

$array = array('array1'=>array('array2'=>array('find_some_key'=>'some_value'))); 
echo get_value_by_key($array,'find_some_key'); // outputs: some_value 
+0

該函數將檢索指定鍵的ok值。問題是他需要的值有數字鍵,如0(或者其他數字值),而且你不能像這樣找到它們。 – s3v3n 2010-12-17 02:19:59

+0

你是對的,在這種情況下,它會返回一個「黑盒子」 – fabio 2010-12-17 02:53:00

+0

謝謝你的回覆..我非常感謝!它不能解決問題。我正在尋找更廣泛和高度優化的解決方案。之前已經實現了您的和其他類似的解決方案,但它們非常具體,並且未針對遍歷10k到15k陣列元素進行高度優化。再次感謝您。 – 2010-12-17 03:11:32

0

我有同樣的問題,所以我開發了這個功能,解決

private function array_key_search($value, $key) { 
     $result = false; 
     if (is_array($value)) { 
      foreach ($value as $k => $v) { 
       $result = $k === $key ? $v : $this->array_key_search($v, $key); 
       if ($result) { 
        break; 
       } 
      } 
     } 
     return $result; 
} 

此功能通過一個數組的所有鍵循環,並檢索與名字第一次出現分配變量$關鍵

+1

請給你的答案添加一些解釋。僅有代碼的答案有時足夠好,但代碼+解釋答案總是更好 – Barranka 2014-11-26 21:58:17

相關問題