替换PHP数组中的所有键

y1aodyip  于 2023-09-29  发布在  PHP
关注(0)|答案(6)|浏览(106)

这是我的数组:

['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);
o4tp2gmn

o4tp2gmn1#

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

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://3v4l.org/p9WFK

omjgkv6w

omjgkv6w2#

实际上,您可以使用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

oknwwptz

oknwwptz3#

这里我们使用array_walk,在整个迭代过程中,我们将key中的e替换为!,并将key和value放入新数组中。
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);
voj3qocg

voj3qocg4#

如果你有这个:

$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]];
}
5cg8jx4n

5cg8jx4n5#

我们可以迭代array并标记所有有问题的键以进行更改。检查该值是否为字符串,如果是,请确保在需要时完成替换。如果它是一个array而不是一个字符串,那么递归地调用function来获取内部的array。当这些值被解析后,执行键替换并删除坏键。在本例中,为$old传递"e",为$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;
}
5sxhfpxr

5sxhfpxr6#

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

给出:

$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)中的值重建数组

相关问题