Как удалить префикс в ключах массива
Я пытаюсь удалить префикс в ключах массива, и каждая попытка не выполняется. Я хочу достичь:
Имея: Array ( [attr_Size] => 3 [attr_Colour] => 7 )
Получить: Array ( [Size] => 3 [Colour] => 7 )
Ваша помощь будет очень признательна...
Ответы
Ответ 1
Один из способов получить: 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;
}
Если вы думаете, что в символах будет несколько подчеркиваний, просто замените первую строку внутри foreach на list($dummy, $newkey) = explode('attr_', $key);
Ответ 2
Если я понял ваш вопрос, вам не нужно использовать 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 )
Ответ 3
Здесь что-то еще, чтобы пережевать, можно повторно использовать для нескольких массивов в вашем приложении, имеющих разные ключевые префиксы. Это было бы полезно, если у вас есть префикс 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"
}