2012-07-05 101 views
1

我有一個數組$ PARAMS具有以下內容:數組鍵的值

Array(
    0 => "array" 
    1 => "arrayName" //variable 
    2 => "key1" //optional&variable ie. 0 or 'foo' 
    3 => "key2" //optional&variable ie. 0 or 'foo' 
    //etc. 
) 

另外,我有一個包含我對被請求的頁面(MVC風格)所有變量的stdObject。 所以,我會在那裏有一個這樣的數組:

$std = new stdObject(); 
$std->arrayName->array('foo', 'bar'); 

現在我想$ STD數組的第一個值。因此,我在$ params中使用「key1」參數,並將其設置爲'0',以便選擇$ std-> arrayName [0]值('foo')。請注意,我不使用「key2」參數,因爲我不想選擇$ std-> arrayName [key1] [key2]。

但是如果我需要嵌套數組的值呢?

$std = new stdObject(); 
$std->arrayName->array('foo', array('bar', 'fish')); 

我將通過設置 「KEY1」 參數設置爲1和 「KEY2」 參數設置爲1,以及請求$ STD-> arrayName中[1] [1]的值( '魚')。所以它會選擇$ std-> arrayName [key1] [key2]。

但是如果我有10個數組嵌套在一起呢?極不可能,但這是可能的。我想選擇$ std-> arrayName [key1] [key2] [key3] [..] [key10]來選擇位於那裏的某個值。 例如:$ std-> arrayName [0] [3] [4] [6] [2] [9] ['foo'] ['bar] [9] [2];

所以我的問題是:如何通過作爲第一個數組(arrayName)的鍵的另一個數組($ params)中定義的值來選擇某個數組(arrayName)的值。但是,鍵的數量($ params中的值)是可選的。

也許這個問題不完全可以理解,所以請隨時提出更多信息。

+2

我已閱讀的問題兩次,仍然不知道它是什麼。你可能會更好地修改這些例子,使它們具有相似的鍵名,因爲'key_name_1'與'foo'的關係並不明顯' – zerkms 2012-07-05 23:13:02

+0

@zerkms我改變了問題。理解更好嗎? – Jelmer 2012-07-05 23:33:20

+0

不。就我個人而言,我仍然沒有看到'fish'和'key1'之間的任何聯繫 – zerkms 2012-07-05 23:40:04

回答

2

您需要循環鍵陣列並將每個級別分配給一個變量,直到您達到最終結果時您應該擁有所需的值。

是這樣的(未經測試,沒有錯誤檢查):

function array_value_at ($array, $keys) { 
    foreach ($keys as $key) { 
    $array = $array[$key]; 
    } 
    return $array; 
} 
+0

其實有點明顯,就是無法實現。謝謝:) – Jelmer 2012-07-05 23:42:32

+1

@Jelmer這是相對簡單的,但如果你至少在其中添加一個'isset()'檢查是一個好主意,以確保當鍵數組引用某些東西時不會觸發大量錯誤那不存在。當這種事情開始變得有趣的時候,當你想獲得一個*引用*到keys數組所描述的項目時,你必須非常小心,不要修改輸入數組。 – DaveRandom 2012-07-05 23:45:59

+0

是的,我知道;)爲了更容易理解,我將這一部分從問題中解放出來。會對很多其他人有所幫助。 – Jelmer 2012-07-05 23:58:00