2013-10-17 248 views
0

我想要做的是有一個函數接受兩個參數,兩個數組,第一個是不同長度的一維數組,第二個是一個不同深度和長度的多維數組。第一個數組永遠不會關聯,第二個數組總是一個完全關聯的數組。如何獲得多維數組與另一個一維數組

該函數將返回多維數組中所請求的值,如第一個數組所示。

假設第一個數組總是被手寫並傳遞給這個函數。這意味着開發人員總是知道從多維數組中返回值,並且永遠不會將請求傳遞給值不存在的函數。

我認爲下面的代碼是我試圖實現的最好的例子。

//Example multi-dimensional array 
$multi = array(
     'fruit' => array(
         'red' => array(
            'strawberries' => '$2.99/lb', 
            'apples' => '$1.99/lb' 
            ), 
         'green' => array(
            'honeydew' => '$3.39/lb', 
            'limes' => '$0.75/lb' 
            ) 
        ), 
     'vegetables' => array(
         'yellow' => array(
            'squash' => '$1.29/lb', 
            'bellpepper' => '$0.99/lb' 
            ), 
         'purple' => array(
            'eggplant' => '$2.39/lb' 
            ) 
        ), 
     'weeklypromo' => '15% off', 
     'subscribers' => array(
          '[email protected]' => 'User 1', 
          '[email protected]' => 'User 2', 
          '[email protected]' => 'User 3', 
          '[email protected]' => 'User 4' 
          ) 
     ); 

//Example one-dimensional array 
$single = array('fruit', 'red', 'apples'); 

function magicfunc($single, $multi) { 
    //some magic here that looks something like below 
    $magic_value = $multi[$single[0]][$single[1]][$single[2]]; 
    return $magic_value; 
} 

//Examples: 

print magicfunc(array('fruit', 'red', 'apples'), $multi); 
Output: 
$1.99/lb 

print magicfunc(array('subscribers', '[email protected]'), $multi); 
Output: 
User 3 

print magicfunc(array('weeklypromo'), $multi); 
Output: 
15% off 

回答

1

這將返回值的要求:

function magicfunc($single, $multi) { 
    while (true) { 
     if (!$single) { 
      break; 
     } 
     $searchIndex = array_shift($single); 

     foreach ($multi as $k => $val) { 
      if ($k == $searchIndex) { 
       $multi = $val; 
       continue 2; 
      } 
     } 
    } 
    return $multi; 
}