2010-03-25 104 views
0

我有一個數組$數據PHP鍵名陣列

fruit => apple, 
seat => sofa, 

等我通過所以要循環,每個密鑰成爲type_key [0] [ '值']所以例如

type_fruit[0]['value'] => apple, 
type_seat[0]['value'] => sofa, 

我認爲會這樣做,即

foreach ($data as $key => $value) 
{ 
     # Create a new, renamed, key. 
     $array[str_replace("/(.+)/", "type_$1[0]['value']", $key)] = $value; 

     # Destroy the old key/value pair 
     unset($array[$key]); 

} 

print_r($array); 

不起作用。我怎樣才能使它工作?

此外,我希望一切都在鍵(不是值)爲小寫:有沒有一種簡單的方法呢?謝謝。

+0

我不確定你在這裏期待什麼。你希望KEY看起來像'type_fruit [0] ['value']',所以你可以使用'$ array [「type_fruit [0] ['value']」]''來訪問它。 – zneak 2010-03-25 20:46:36

回答

1

你的意思是你想要把密鑰分成不同的數組?還是你的意思是隻更改相同陣列中的鍵?

$array = array(); 
    foreach ($data as $key => $value) 
    { 
     $array['type_' . strtolower($key)] = array(array('value' => $value)); 
    } 

,如果你想你的鑰匙是獨立變量,那麼這樣做:

extract($array); 

現在你將有$ type_fruit和$ type_sofa。你可以找到你的值爲$ type_fruit [0] ['value'],因爲我們在那裏放置了一個額外的嵌套數組。

+0

不要忘記strtolower ) 按鍵 :) – Dor 2010-03-25 20:56:25

-1

對於初學者

$array[str_replace("/(.+)/", "type_$1[0]['value']", $key)] = $value; 

應該

$array[str_replace("/(.+)/", type_$1[0]['value'], $key)] = $value; 
+0

刪除「around type_ $ 1 – Grumpy 2010-03-25 20:48:08

+0

你在開玩笑嗎?你只是打斷了他對str_replace的調用,而不是使用preg_replace修復它。」 – zneak 2010-03-25 20:50:23

+0

「type_ $ 1 [0] ['value']」將被視爲一個字符串,因此type_ $ 1 [0] ['value']將返回他正在查找的值(雖然我同意他使用的是錯誤的函數) – Grumpy 2010-03-25 20:59:13

0

您的要求聽起來......犯罪嫌疑人。也許你的意思是像下面這樣:

$arr = array('fruit' => 'apple', 'seat' => 'sofa'); 
$newarr = array(); 

foreach ($arr as $key => $value) 
{ 
    $newkey = strtolower("type_$key"); 
    $newarr[$newkey] = array(array('value' => $value)); 
} 

var_dump($newarr); 
0

首先我不會改變輸入數組,但創建一個新的,除非你在內存限制嚴重,嚴重的麻煩。
然後你不能簡單地替換鍵來添加一個更深層次的嵌套到數組中。 $x[ 'abc[def]' ]仍然只引用頂層元素,因爲abc[def]被解析爲一個字符串,但您想要$x['abc']['def']

$data = array(
'fruit' => 'apple', 
'seat' => 'sofa' 
); 

$result = array(); 

foreach($data as $key=>$value) { 
    $target = 'type_'.$key; 
    // this might be superfluous, but who knows... if you want to process more than one array this might be an issue. 
    if (!isset($result[$target]) || !is_array($result[$target])) { 
    $result[$target] = array(); 
    } 
    $result[$target][] = array('value'=>$value); 
} 

var_dump($result);