PHP:更改或填充数组的键名

时间:2010-03-02 13:16:10

标签: php arrays replace

我有以下数组:

$person = array('first_name' => 'Fred', 'last_name' => 'Flintstone');

我想更改/填充键,以便数组最终为(注意额外的冒号):

$person = array('::first_name::' => 'Fred', '::last_name::' => 'Flintstone');

出于某种原因,我在最简单的方法上画了一个空白

3 个答案:

答案 0 :(得分:4)

我不知道最简单的方法,但最快的方法就是绕过我的脑袋。

foreach($person as $key=>$value) {
$newArray['::' . $key .'::'] = $value;

}

我猜你甚至可以做到

function tokenize($person)
{
    foreach($person as $key=>$value) {
    $newArray['::' . $key .'::'] = $value;    
    }
    return $newArray;
}

$person = array('first_name' => 'Fred', 'last_name' ='Flintstone');
$newPerson = array_map("tokenize", $person);
print_r($newPerson);

答案 1 :(得分:1)

Laykes解决方案的变化,只是没有创建新数组:

foreach($array as $key => $val) {
    $array["..$key.."] = $val;
    unset($array[$key]);
}

我假设您要这样做是因为您要使用以下内容替换模板中的占位符:

$template = str_replace(array_keys($person), $person, $template);

如果是这样,请记住,您在$ person上迭代两次。一次更换钥匙,另一次更换钥匙。因此,使用将键作为填充值返回的函数替换对array_keys()的调用会更有效。

之类的东西
function array_keys_padded(array $array, $padding) {
    $keys = array();
    while($key = key($array)) {
        $keys[] = $padding . $key . $padding;
        next($array);
    }
    return $keys;
}
// Usage
$template = str_replace(array_keys_padded($person, '::'), $person, $template);

但话说回来,你可以通过一个简单的迭代来做到这一点:

foreach($person as $key => $val) {
    str_replace("::$key::", $val, $template);
}

但如果你不这样做,请忽略这个答案:)

出于好奇,您的用户如何提供阵列?

答案 2 :(得分:1)

你也可以这样做:

<?php
$person = array('first_name' => 'Fred', 'last_name' =>'Flintstone');

$keys = array_keys($person); // array of keys.

for($i=0;$i<count($person);$i++) {
    $keys[$i] = "::$keys[$i]::"; // change each key.
}
// recreate array using changed keys.
$person = array_combine($keys,array_values($person)); 

var_dump($person);
?>

<强>输出:

array(2) {
  ["::first_name::"]=>
  string(4) "Fred"
  ["::last_name::"]=>
  string(10) "Flintstone"
}