更改数组中的键名称

时间:2014-04-09 07:49:18

标签: php arrays key unset

所以,拥有如下数组:

$input = [
    'first_name'   => 'Alex',
    'last_name'    => 'UFO',
    'email'        => 'test@test.com',
    'phone_number' => '124124',
    // .....
    'referral_first_name'   => 'Jason',
    'referral_last_name'    => 'McNugget',
    'referral_email'        => 'jingleball@nuggets.com',
    'referral_phone_number' => '1212415',
];

在处理完第一部分之后,在referral...之前,您是否考虑过使用referral_first_name等替换first_name的更好方法,然后进行以下操作?也许是一种更加动态和自动的方式。

$input['first_name'] = $input['referral_first_name'];
unset($input['referral_first_name']);

$input['last_name'] = $input['referral_last_name'];
unset($input['referral_last_name']);

$input['email'] = $input['referral_email'];
unset($input['referral_email']);

$input['phone_number'] = $input['referral_phone_number'];
unset($input['referral_phone_number']);

伙计们,我忘了提及,但我已经用foreach做了,但问题是当数组变得非常大时(通常是这样,而不是一个人使用该函数,但是许多),这意味着额外的不必要的处理时间,因为它必须在到达referral_..部分之前迭代整个数组。

5 个答案:

答案 0 :(得分:2)

你必须创建另一个数组,这段代码应该动态地执行:

$newInput = array();
foreach($input as $key => $element){
    $newKey = explode("_", $key, 2);
    $newInput[$newKey[1]] = $element;
}

<强>输出

enter image description here

希望这会有所帮助: - )

答案 1 :(得分:1)

重新创建阵列是唯一的方法..

  • 从原始数组中获取所有键并将其放入临时数组
  • 使用array_walk修改该临时数组以向其添加referral
  • 现在使用上面的键和旧数组中的值来使用array_combine

代码..

<?php
$input = [
    'first_name'   => 'Alex',
    'last_name'    => 'UFO',
    'email'        => 'test@test.com',
    'phone_number' => '124124'];

$ak = array_keys($input);
array_walk($ak,function (&$v){ $v = 'referral_'.$v;});
$input=array_combine($ak,array_values($input));
print_r($input);

<强> OUTPUT:

Array
(
    [referral_first_name] => Alex
    [referral_last_name] => UFO
    [referral_email] => test@test.com
    [referral_phone_number] => 124124
)

由于您正在寻找性能,请使用典型的foreach

$newarr = array();
foreach($input as $k=>$v ) {
$newarr["referral_".$k]=$v;
}

答案 2 :(得分:0)

这样的事情怎么样:

$replace = array('first_name', 'last_name', 'email');
foreach($replace AS $key) {
    $input[$key] = $input['referral_' . $key];
    unset($input[$input['referral_' .$key]]);
}

答案 3 :(得分:0)

尝试下面的一个......

$input = [
   //'first_name'   => 'Alex',
   // 'last_name'    => 'UFO',
   // 'email'        => 'test@test.com',
    //'phone_number' => '124124',
    // .....
    'referral_first_name'   => 'Jason',
    'referral_last_name'    => 'McNugget',
    'referral_email'        => 'jingleball@nuggets.com',
    'referral_phone_number' => '1212415',
];

foreach ($input as $key=>$value){
    $refereal_pos = strpos($key, 'referral_');
    if($refereal_pos !== FALSE && $refereal_pos == 0){
        $input[str_replace('referral_', '', $key)] = $value;
        unset($input[$key]);
    }
}

print_r($input);

答案 4 :(得分:0)

您可以使用以下内容;

function changeKeys($input) {
    $keys = array_keys($input);
    foreach($keys as $key) {
        if (strpos($key, "referral_") !== false) {
            $tempKey = explode("referral_", $key);
            $input[$tempKey[1]] = $input[$key];
                unset($input[$key]);
        }
    }   
    return $input;
}

changeKeys($input);

以下是一个有效的演示: codepad

注意:请确保您的密钥在“referral_”删除后由于重复密钥而被覆盖