2011-12-14 51 views
6

我正在嘗試完成爲我的自定義MVC框架創建的URL路由器。我有一個我從URL中解析出的參數列表,但問題是他們只有數字鍵。我想要做的就是設置它,這樣$ params數組中的第一個值將是KEY,然後數組中的第二個值是第一個KEY的VALUE值。但我需要更進一步。實際上,我需要數組中的所有奇數數字鍵的值爲新KEY,偶數鍵的值爲數值。重組一個數組:奇數條目爲KEY,甚至條目爲VALUE

例子:

這是它目前如何設置:

Array 
(
    [0] => greeting 
    [1] => hello 
    [2] => question 
    [3] => how-are-you 
    [4] => response 
    [5] => im-fine 
) 

這是怎麼了需要爲(轉換後):

Array 
(
    [greeting] => hello 
    [question] => how-are-you 
    [response] => im-fine 
) 

難道是更容易地創建這種類型的數組時,當我把它從URL字符串中取出時,用'/'分隔符來分解字符串?如果是這樣,那麼最好的功能是什麼?

這可能是一個簡單的解決方案,因爲我確定這是一個常見問題,但是任何啓示?

+0

我想我是你直到你說你想讓第一個索引(0)成爲關鍵字,然後你說你希望奇數索引成爲關鍵字。您的意思是:從零開始,將第一個值作爲關鍵字,第二個作爲值放入地圖中,併爲每個鍵/值對執行此操作。 – 2011-12-14 08:46:13

回答

8

也許可以使用array_splice()這個嗎?

$result = array(); 

while (count($urls)) { 
    list($key,$value) = array_splice($urls, 0, 2); 
    $result[$key] = $value; 
} 

這將從URL列表中提取前兩個條目,並將它們用作結果數組的鍵和值。重複,直到源列表爲空。

+0

我會試試這個...如果數組中的條目數量不均勻,它會導出錯誤嗎? – cshoffie 2011-12-14 08:45:24

1

喜歡的東西:

$data = array (
    'greeting', 
    'hello', 
    'question', 
    'how-are-you', 
    'response', 
    'im-fine', 
); 

$new = array(); 

for ($i = 0, $lim = sizeof($data); $i < $lim; $i += 2) { 
    $new[$data[$i]] = isset($data[$i + 1]) ? $data[$i + 1] : null; 
} 

print_r($new); 
0

我不知道這是否是最好的解決辦法,但我所做的是

  $previousElement = null; 
      foreach ($features as $key => $feature) { 
       //check if key is even, otherwise it's odd 
       if ($key % 2 === 0) { 
        $features[$feature] = $feature; 
       } else { 
        $features[$previousElement] = $feature; 
       } 
       //saving element so I can "remember" it in next loop 
       $previousElement = $feature; 
       unset($features[$key]); 
      } 
0

做的最好的方法是用分塊,並在使用它名單。

$array = array("greeting", "hello", "question", "how-are-you", "response", "im-fine"); 

$assoc = array(); 
    foreach (array_chunk($array, 2) as $pair) { 
    list($key, $value) = $pair; 
    $assoc[$key] = $value; 
} 

var_export($assoc); 

/* 
    array (
     'greeting' => 'hello', 
     'question' => 'how-are-you', 
     'response' => 'im-fine', 
) 
*/ 

found here

0

只是因爲沒有其他人已經指出了這一點,這個工程是至少不如內置的功能表現:

$array = array("greeting", "hello", "question", "how-are-you", "response", "im-fine"); 
$res = array(); 
for($i=0; $i < count($array); $i+=2){ 
    $res[$array[$i]] = $array[$i+1]; 
} 
相關問題