2011-12-23 67 views
14

我嘗試刪除數組鍵中的前綴,並且每次嘗試都失敗。我想實現的是:如何刪除數組鍵中的前綴

有:Array ([attr_Size] => 3 [attr_Colour] => 7)

至獲取:Array ([Size] => 3 [Colour] => 7)

你的幫助將非常讚賞...

+6

所以你只是想從你的數組鍵刪除'attr_'?這與'implode()'有什麼關係? 'attr_my_prop'應該變成'my_prop','prop'還是別的?最重要的是,爲什麼?我們可以看到你的「失敗」代碼嗎? – 2011-12-23 09:42:45

回答

3

其中一個方式來獲得:Array ([Size] => 3 [Colour] => 7)從你Having: Array ([attr_Size] => 3 [attr_Colour] => 7)

$new_arr = array(); 
foreach($Your_arr as $key => $value) { 

list($dummy, $newkey) = explode('_', $key); 
$new_arr[$newkey] = $value; 

} 

如果你認爲還會有多個下劃線的鍵只需更換第一行我nside foreach list($dummy, $newkey) = explode('attr_', $key);

+0

這確實有效。非常感謝。 – user1113177 2011-12-23 09:53:27

+2

查看下面的更可取的答案。 – 2014-01-29 15:29:28

+0

這不應該是IMO批准的答案。請參閱下面的使用更合適的array_keys()函數。它避免了這個答案中的循環。對不起-1投票從我。 – Ligemer 2015-06-17 21:39:46

4

如果我理解你的問題,你不必使用implode()來得到你想要的。

define(PREFIX, 'attr_'); 

$array = array('attr_Size' => 3, 'attr_Colour' => 7); 

$prefixLength = strlen(PREFIX); 

foreach($array as $key => $value) 
{ 
    if (substr($key, 0, $prefixLength) === PREFIX) 
    { 
    $newKey = substr($key, $prefixLength); 
    $array[$newKey] = $value; 
    unset($array[$key]); 
    } 
} 

print_r($array); // shows: Array ([Size] => 3 [Colour] => 7) 
+0

太棒了!作品。現在看起來很簡單。非常感謝。 – user1113177 2011-12-23 09:53:08

+1

不客氣。請不要忘記upvote /接受您滿意的答案:) – 2011-12-23 09:55:41

0

這裏還有一些其他的東西可以在應用程序中的多個數組中重複使用,這些數組具有不同的關鍵字前綴。如果你有Redis前綴的鍵來重新映射或者具有這種性質,這會很有用。

$inputArray = array('attr_test' => 'test', 'attr_two' => 'two'); 

/** 
* Used to remap keys of an array by removing the prefix passed in 
* 
* Example: 
* $inputArray = array('app_test' => 'test', 'app_two' => 'two'); 
* $keys = array_keys($inputArray); 
* array_walk($keys, 'removePrefix', 'app_'); 
* $remappedArray = array_combine($keys, $inputArray); 
* 
* @param $value - key value to replace, should be from array_keys 
* @param $omit - unused, needed for prefix call 
* @param $prefix - prefix to string replace in keys 
*/ 
function removePrefix(&$value, $omit, $prefix) { 
    $value = str_replace($prefix, '', $value); 
} 

// first get all the keys to remap 
$keys = array_keys($inputArray); 

// perform internal iteration with prefix passed into walk function for dynamic replace of key 
array_walk($keys, 'removePrefix', 'attr_'); 

// combine the rewritten keys and overwrite the originals 
$remappedArray = array_combine($keys, $inputArray); 

// see full output of comparison 
var_dump($inputArray); 
var_dump($remappedArray); 

輸出:

array(2) { 
    'attr_test' => 
    string(4) "test" 
    'attr_two' => 
    string(3) "two" 
} 
array(2) { 
    'test' => 
    string(4) "test" 
    'two' => 
    string(3) "two" 
}