2013-02-25 85 views
-1

我有一個由中繼器創建的大型數組,因此數組可以無限大。我需要:獲取「從多維數組中的特定鍵」的值並放入數組中

  • 1.搜索雖然陣列
  • 2.獲取的[field_18]
  • 3.輸出陣列中的所有的值的所有值( '-5',「-1 」,ECT)
Array 
(
[field_22] => Mid-Distance Free 
[field_25] => Array 
    (
     [0] => 1 
    ) 

[field_23] => Its a freestyle workout 
[field_6] => Array 
    (
     [0] => Array 
      (
       [field_7] => 1 
       [field_8] => 0 
       [field_9] => 0 
       [field_10] => Array 
        (
         [0] => Array 
          (
           [field_11] => 6 
           [field_12] => 50 
           [field_13] => jumping jacks 
           [field_14] => 
          ) 

         [1] => Array 
          (
           [field_11] => 2 
           [field_12] => 20 
           [field_13] => pushups 
           [field_14] => 
          ) 

         [acfcloneindex] => Array 
          (
           [field_11] => 1 
           [field_12] => 1 
           [field_13] => pushups 
           [field_14] => 
          ) 

        ) 

      ) 

     [acfcloneindex] => Array 
      (
       [field_7] => 1 
       [field_8] => 0 
       [field_9] => 0 
       [field_10] => Array 
        (
         [acfcloneindex] => Array 
          (
           [field_11] => 1 
           [field_12] => 1 
           [field_13] => pushups 
           [field_14] => 
          ) 

        ) 

      ) 

    ) 

[field_17] => Array 
    (
     [0] => Array 
      (
       [field_7] => 1 
       [field_8] => 0 
       [field_9] => 0 
       [field_10] => Array 
        (
         [0] => Array 
          (
           [field_11] => 5 
           [field_12] => 100 
           [field_13] => Freestyle 
           [field_14] => Descend 1-5 
           [field_18] => 5 
          ) 

         [1] => Array 
          (
           [field_11] => 10 
           [field_12] => 50 
           [field_13] => Drill 
           [field_14] => Choice 
           [field_18] => 5 
          ) 

         [2] => Array 
          (
           [field_11] => 1 
           [field_12] => 400 
           [field_13] => Freestyle 
           [field_14] => Negative Split 
           [field_18] => -20 
          ) 

         [acfcloneindex] => Array 
          (
           [field_11] => 1 
           [field_12] => 25 
           [field_13] => Butterfly 
           [field_14] => 
           [field_18] => 
          ) 

        ) 

      ) 

     [acfcloneindex] => Array 
      (
       [field_7] => 1 
       [field_8] => 0 
       [field_9] => 0 
       [field_10] => Array 
        (
         [acfcloneindex] => Array 
          (
           [field_11] => 1 
           [field_12] => 25 
           [field_13] => Butterfly 
           [field_14] => 
           [field_18] => 
          ) 

        ) 

      ) 

    ) 

[field_19] => Array 
    (
     [0] => Array 
      (
       [field_7] => 1 
       [field_8] => 0 
       [field_9] => 1 
       [field_10] => Array 
        (
         [0] => Array 
          (
           [field_11] => 20 
           [field_12] => 100 
           [field_13] => Freestyle 
           [field_14] => Hold 500 race pace 
           [field_18] => -5 
          ) 

         [1361771245813] => Array 
          (
           [field_11] => 1 
           [field_12] => 75 
           [field_13] => Butterfly 
           [field_14] => 
           [field_18] => 
          ) 

         [acfcloneindex] => Array 
          (
           [field_11] => 1 
           [field_12] => 125 
           [field_13] => Butterfly 
           [field_14] => 
           [field_18] => 
          ) 

        ) 

      ) 

     [acfcloneindex] => Array 
      (
       [field_7] => 
       [field_8] => 0 
       [field_9] => 0 
       [field_10] => Array 
        (
         [acfcloneindex] => Array 
          (
           [field_11] => 1 
           [field_12] => 25 
           [field_13] => Butterfly 
           [field_14] => 
           [field_18] => 
          ) 

        ) 

      ) 

    ) 

[field_21] => Array 
    (
     [acfcloneindex] => Array 
      (
       [field_7] => 
       [field_8] => 0 
       [field_9] => 0 
       [field_10] => Array 
        (
         [acfcloneindex] => Array 
          (
           [field_11] => 
           [field_12] => 25 
           [field_13] => Butterfly 
           [field_14] => 
           [field_18] => 
          ) 

        ) 

      ) 

    ) 

) 

我試圖去通過所有的密鑰,但無法弄清楚哪裏從那裏去。這是我使用的代碼。

function array_keys_multi(array $array) 
{ 
$keys = array(); 

foreach ($array as $key => $value) { 
    $keys[] = $key; 

    if (is_array($array[$key])) { 
     $keys = array_merge($keys, array_keys_multi($array[$key])); 
    } 
} 

return $keys; 
} 
+0

你試過了什麼? SO並不是一個給我們的codez網站,試圖做,如果你有問題,那麼請求幫助。請閱讀[FAQ](http://stackoverflow.com/faq) – 2013-02-25 06:00:49

回答

0

試試這個:

function array_key_exists_r($needle, $haystack) 
{ 
    //$result = array(); 
    global $result; 
    if(is_array($haystack)){ 
     foreach ($haystack as $key=>$v) { 
      if (is_array($v)) { 
       array_key_exists_r($needle, $v); 
      } 
      else{ 
       if($key == $needle){ 
        $result[] = $v; 
       } 
      } 
     } 
    } 

    return $result; 
} 


echo "<pre>"; 
print_r(array_key_exists_r("field_18", $your_array)); 
+0

編輯答案請現在檢查它 – 2013-02-25 06:17:08

+0

差不多。這隻返回相同大小的數組,只顯示field_18的值。 – user2106176 2013-02-25 06:22:24

+0

現在就試着解決問題 – 2013-02-25 06:43:10

0

您可以使用array_walk_recursive

$array = array(/*some data*/); 
$result = array(); 
$search_key = 'field_18'; 
array_walk_recursive($array, function($item, $key)use($search_key, &$result){ 
if ($search_key == $key) 
    $result[]=$item; 
}); 
$search_values = array('-5', '-1'); 
$result2 = array(); 
array_walk_recursive($array, function($item, $key)use($search_values, &$result2){ 
if (is_array($item) && array_intersect($item, $search_values)) 
    $result2[]=$item; 
}); 

附:代碼沒有經過測試,只是一個想法。

0

由於你的數組可以像你使用要求array_walk可能是危險非常大。如果您使用的是PHP 5.5,您可以構建一個簡單的foreach循環併產生相應的值。這樣消費函數可以根據需要獲取儘可能多的條目。

+0

你可以給一個鏈接或解釋_因爲你的數組可以是非常大的,因爲你聲稱使用array_walk可能是dangerous_? – sectus 2013-02-25 06:33:07

+0

array_walk將不會返回,直到整個數組已被處理。如果你使用收益率,你可以讓一個消費者在20個結果之後停止。 – 2013-02-25 08:45:50