2017-12-27 279 views
-2

我想訪問多維數組中的數據。 我需要獲取這些數據的值(EC000001, EG000017, EN, EF007220),但我在PHP中處於foreach循環的困境,特別是當需要嵌套的foreach時能否請你幫助我,給我解決方案來訪問想要的數據?PHP - 訪問多維數組的數據

我需要遍歷所有的$ c,然後循環內部以獲取所有需要的數據。這是我之前收集EC000001值的方法,但我相信有更好的解決方案。陣列的

foreach ($c as $classCodes => $value) { 

    $classCode = key($c[$classCodes]); //classCode -> EC000001 
} 

結構:

Array 
(
    **[EC000001]** => Array 
     (
      [0] => **EG000017** 
      [1] => Array 
       (
        [0] => Array 
         (
          [0] => **EN** 
          [1] => Busbar terminal 
         ) 
        [1] => Array 
         (
          [0] => **nl-NL** 
          [1] => Aansluitklem stroomrail 
         ) 
       ) 

      [2] => Array 
       (
        [0] => Array 
         (
          [0] => **EF007220** 
          [1] => EU570448 
          [2] => Array 
           (
           ) 
         ) 

        [1] => Array 
         (
          [0] => EF007219 
          [1] => EU570448 
          [2] => Array 
           (
           ) 
         ) 

        [2] => Array 
         (
          [0] => EF000073 
          [1] => 
          [2] => Array 
           (
            [0] => EV009241 
            [1] => EV009472 
           ) 
         ) 

        [3] => Array 
         (
          [0] => EF007092 
          [1] => EU570448 
         ) 

        [4] => Array 
         (
          [0] => EF004969 
          [1] => EU570126  
         ) 
       ) 
     ) 

) 
+0

粘貼數組結構的文本,而不是圖像。 –

+0

@cale_b我做到了。希望現在能更好地解釋這個問題。 – punky

+0

@ punky查看我的回答 – Bluetree

回答

0

我無法測試它,但你可以用這個嘗試的循環中:

$value[0];  // -> 1 
$value[1][0][0]; // -> 2 
$value[1][1][1]; // -> 3 
+0

已編輯的問題,希望現在能更好地解釋。 – punky

0
$EG000002Array[0][EG000001][0] 

$EG000002Array[0][EG000001][1][0] 

$EG000002Array[0][EG000001][1][1][1] 
+0

已編輯的問題,希望現在能更好地解釋。 – punky

0

有多種途徑獲得來自多維陣列的陣列值

例如使用的foreach():

$flavors = array('Japanese' => array('hot' => 'wasabi', 
            'salty' => 'soy sauce'), 
       'Chinese' => array('hot' => 'mustard', 
            'pepper-salty' => 'prickly ash')); 

// $culture is the key and $culture_flavors is the value (an array) 
foreach ($flavors as $culture => $culture_flavors) { 

    // $flavor is the key and $example is the value 
    foreach ($culture_flavors as $flavor => $example) { 
     print "A $culture $flavor flavor is $example.\n"; 
    } 
} 

或使用用於():

$specials = array(array('Chestnut Bun', 'Walnut Bun', 'Peanut Bun'), 
        array('Chestnut Salad','Walnut Salad', 'Peanut Salad')); 

// $num_specials is 2: the number of elements in the first dimension of $specials 
for ($i = 0, $num_specials = count($specials); $i < $num_specials; $i++) { 
    // $num_sub is 3: the number of elements in each sub-array 
    for ($m = 0, $num_sub = count($specials[$i]); $m < $num_sub; $m++) { 
     print "Element [$i][$m] is " . $specials[$i][$m] . "\n"; 
    } 
} 

輸出應該是這樣的:

Element [0][0] is Chestnut Bun 
Element [0][1] is Walnut Bun 
Element [0][2] is Peanut Bun 
Element [1][0] is Chestnut Salad 
Element [1][1] is Walnut Salad 
Element [1][2] is Peanut Salad 
0

可以使用遞歸正則表達式檢查它是否粗體:)

通知我們把&$classCodes通過參考通過它和沒有 。

功能:

function get_bolded_data($c, &$classCodes = array()){ 
    foreach($c as $k1 => $v1){ 
     if(is_array($v1)){ 
      //If $v1 is an array we call get_bolded_data() again and pass 
      //$v1 and $classCode 
      get_bolded_data($v1,$classCodes); 
     }else if(preg_match("/(\*\*).*(\*\*)/", $v1)){ 
      $classCodes[] = $v1; 
     } 
    } 
} 

用法:

$classCodes = array(); 
$c = array(
    0 => array(
     '**EC000001**' => array(
      0 => '**EG000017**', 
      1 => array(
       0 => array(
        0 => '**EN**', 
        1 => 'Busbar terminal' 
       ) , 
       1 => array(
        0 => '**nl-NL**', 
        1 => 'Aansluitklem stroomrail' 
       ) 
      ) , 
      2 => array(
       0 => array(
        0 => '**EF007220**', 
        1 => 'EU570448', 
        2 => array() 
       ) , 
       1 => array(
        0 => 'EF007219', 
        1 => 'EU570448', 
        2 => array() 
       ) , 
       2 => array(
        0 => 'EF000073', 
        1 => '', 
        2 => array(
         0 => 'EV009241', 
         1 => 'EV009472' 
        ) 
       ) , 
       3 => array(
        0 => 'EF007092', 
        1 => 'EU570448' 
       ) , 
       4 => array(
        0 => 'EF004969', 
        1 => 'EU570126' 
       ) 
      ) 
     ) 
    ) 
); 
//Call our function 
get_bolded_data($c, $classCodes); 

下面是從的var_dump結果:

array(4) { 
    [0]=> 
    string(12) "**EG000017**" 
    [1]=> 
    string(6) "**EN**" 
    [2]=> 
    string(9) "**nl-NL**" 
    [3]=> 
    string(12) "**EF007220**" 
}