2010-05-12 33 views
1

我正在處理一些數據,我已經改變了某些數組鍵的名稱,但我希望數據基本保持不變......基本上我希望能夠保留數組中的數據存儲在數據庫中,但我想更新與其關聯的數組鍵名稱。str_replace()和strpos()的數組?

此前該數組將是這個樣子的:$var_opts['services'] = array('foo-1', 'foo-2', 'foo-3', 'foo-4');

現在數組鍵不再與「富」爲前綴,而是以「巴」來代替。那麼,如何更新數組變量來擺脫「foos」,並用「bars」代替呢?

像這樣:$var_opts['services'] = array('bar-1', 'bar-2', 'bar-3', 'bar-4');

我已經使用if(isset($var_opts['services']['foo-1'])) { unset($var_opts['services']['foo-1']); }擺脫FOOS的......我只需要弄清楚如何與酒吧替換每個FOO。

我想我會在整個數組上使用str_replace,但是令我沮喪的是它只能用於字符串(去圖,heh)而不是數組。

+1

附註:根據您所提供的代碼,數組$ var_opts [「服務」]沒有所有的「富-X '弦作爲鍵,但作爲價值......鍵實際上是0,1,2,... – 2010-05-12 22:25:02

回答

1

的想法:

  1. 獲取你所有的數組鍵
  2. 列表修改其中的每一個爲你選擇
  3. 與修改後的值替換現有的密鑰

的代碼:

$keys = array_keys($arr); 
$values = array_values($arr); 
$new_keys = str_replace('foo', 'bar', $keys); 
$arr = array_combine($new_keys, $values); 

Wha這實際上是創建一個新的數組,其值與原始數組相同,但其中的鍵已更改。

編輯:根據卡米爾的評論更新如下。

+0

哈哈,聰明!非常感謝,非常方便。 – Josh 2010-05-12 22:24:25

+1

不錯的技巧!你也可以通過傳遞字符串數組作爲第三個參數來對數組值執行str_replace()而不用循環:str_replace('foo','bar',$ keys);因此,你可以有一個oneliner。 ;-) – 2010-05-12 22:25:40

+0

@Kamil很好的捕獲,我會更新使用這個答案。 – Jon 2010-05-12 22:26:36

0

對於您提供的值 $ var_opts ['services'] = array('foo-1','foo-2','foo-3','foo-4');

var_dump($var_opts['services']); 

foreach($var_opts['services'] as &$val) { 
    $val = str_replace('foo', 'bar', $val); 
} 
unset($val); 

var_dump($var_opts['services']); 

,或者如果你想改變實際鍵

$var_opts['services'] = array('foo-1' => 1, 'foo-2' => 2, 'foo-3' => 3, 'foo-4' => 4); 
var_dump($var_opts['services']); 
foreach($var_opts['services'] as $i => $val) { 
    unset($var_opts['services'][$i]); 
    $i = str_replace('foo', 'bar', $i); 
    $var_opts['services'][$i] = $val; 
} 

var_dump($var_opts['services']);