替换php数组中的所有键

时间:2017-04-21 11:18:25

标签: php arrays

这是我的阵列:

['apple']['some code'] 
['beta']['other code']
['cat']['other code 2 ']

如何更换所有" e"字母带"!"在密钥名称中并保留值 所以我会得到类似的东西

['appl!']['some code'] 
['b!ta']['other code']
['cat']['other code 2 ']

我发现了这个,但是因为我不能使用所有按键的名称,所以我无法使用它

$tags = array_map(function($tag) {
    return array(
        'name' => $tag['name'],
        'value' => $tag['url']
    );
}, $tags);

6 个答案:

答案 0 :(得分:3)

我希望你的数组看起来像这样: -

Array
(
    [apple] => some code
    [beta] => other code
    [cat] => other code 2 
)

如果是,那么你可以这样做: -

$next_array = array();
foreach ($array as $key=>$val){
     $next_array[str_replace('e','!',$key)] = $val;
}
echo "<pre/>";print_r($next_array);

输出: - https://eval.in/780144

答案 1 :(得分:2)

你实际上可以坚持使用array_map。它不是很实用,但作为概念的证明,这可以这样做:

$array = array_combine(
    array_map(function ($key) {
        return str_replace('e', '!', $key);
    }, array_keys($array)),
    $array
);

我们使用array_keys函数提取密钥并将其提供给array_map。然后我们使用array_combine将密钥放回原位。

这是working demo

答案 2 :(得分:1)

我们正在使用array_walk,在迭代过程中,我们将密钥中的e替换为!,并将密钥和值放入新数组中。

Try this code snippet here

<?php
$firstArray = array('apple'=>'some code','beta'=>'other code','cat'=>'other code 2 ');
$result=array();
array_walk($firstArray, function($value,$key) use (&$result) {
    $result[str_replace("e", "!", $key)]=$value;
});
print_r($result);

答案 3 :(得分:0)

如果你有这个:

$firstArray = array('apple'=>'some code','beta'=>'other code','cat'=>'other code 2 ');

你可以试试这个:

$keys        = array_keys($firstArray);
$outputArray = array();
$length      = count($firstArray);

for($i = 0; $i < $length; $i++)
{
    $key = str_replace("e", "!", $keys[ $i ]);
    $outputArray[ $key ] = $firstArray[$keys[$i]];
}

答案 4 :(得分:0)

我们可以迭代array并标记要更改的所有有问题的密钥。检查值是否为字符串,如果是,请确保在需要时进行替换。如果它是array而不是字符串,则以递归方式为内部function调用array。解决值后,请执行密钥替换并删除错误密钥。在您的情况下,"e"传递$old"!"传递$new。 (另)

function replaceKeyValue(&$arr, $old, $new) {
    $itemsToRemove = array();
    $itemsToAdd = array();
    foreach($arr as $key => $value) {
        if (strpos($key, $old) !== false) {
            $itemsToRemove[]=$key;
            $itemsToAdd[]=str_replace($old,$new,$key);
        }
        if (is_string($value)) {
            if (strpos($value, $old) !== false) {
                $arr[$key] = str_replace($old, $new, $value);
            }
        } else if (is_array($value)) {
            $arr[$key] = replaceKeyValue($arr[$key], $old, $new);
        }
    }
    for ($index = 0; $index < count($itemsToRemove); $index++) {
        $arr[$itemsToAdd[$index]] = $itemsToRemove[$index];
        unset($arr[$itemsToRemove[$index]]);
    }
    return $arr;
}

答案 5 :(得分:0)

另一个仅使用两行代码的选项:

给出:

$array
(
    [apple] => some code
    [beta] => other code
    [cat] => other code 2 
)

执行

$replacedKeys = str_replace('e', '!', array_keys($array));
return array_combine($replacedKeys, $array);

说明:

str_replace可以采用一个数组并对每个条目执行替换。所以..

  1. array_keys将拉出键(https://www.php.net/manual/en/function.array-keys.php
  2. str_replace将执行替换(https://www.php.net/manual/en/function.str-replace.php
  3. array_combine将使用新更新的键中的键和原始数组(https://www.php.net/manual/en/function.array-combine.php)中的值来重建数组