Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:更改或填充数组的键名_Php_Arrays_Replace - Fatal编程技术网

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

PHP:更改或填充数组的键名,php,arrays,replace,Php,Arrays,Replace,我有以下数组: $person = array('first_name' => 'Fred', 'last_name' => 'Flintstone'); 我想更改/填充键,使数组最终成为注释附加冒号: $person = array('::first_name::' => 'Fred', '::last_name::' => 'Flintstone'); 出于某种原因,我对最简单的方法一窍不通,我不知道最简单的方法,但最快的方法就是循环 foreach($perso

我有以下数组:

$person = array('first_name' => 'Fred', 'last_name' => 'Flintstone');
我想更改/填充键,使数组最终成为注释附加冒号:

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

出于某种原因,我对最简单的方法一窍不通,我不知道最简单的方法,但最快的方法就是循环

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);

我不知道最简单的方法,但最快的方法是在我的头顶上绕一圈

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);

与Laykes解决方案不同,只是不创建新阵列:

foreach($array as $key => $val) {
    $array["..$key.."] = $val;
    unset($array[$key]);
}
我假设您想这样做是因为您正在用以下内容替换模板中的占位符:

$template = str_replace(array_keys($person), $person, $template);
如果是这样,请记住,您在$person上迭代了两次。一次换钥匙,另一次拿钥匙。因此,将对数组_键的调用替换为以填充值形式返回键的函数会更有效,例如

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);
}
但如果你不是这样做的话,请忽略这个答案:


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

与Laykes解决方案不同,只是没有创建新阵列:

foreach($array as $key => $val) {
    $array["..$key.."] = $val;
    unset($array[$key]);
}
我假设您想这样做是因为您正在用以下内容替换模板中的占位符:

$template = str_replace(array_keys($person), $person, $template);
如果是这样,请记住,您在$person上迭代了两次。一次换钥匙,另一次拿钥匙。因此,将对数组_键的调用替换为以填充值形式返回键的函数会更有效,例如

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);
}
但如果你不是这样做的话,请忽略这个答案:

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

您也可以这样做:

<?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);
?>
您还可以执行以下操作:

<?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);
?>

你能解释一下你为什么需要这个吗?因为我感觉你从错误的方向处理问题。我允许在模板中替换用户指定的值数组。模板可能包含诸如::first_name::之类的标记。我认为,对于用户来说,提供一组纯英文键比包含冒号的键更具可读性。我会使用%name%而不是::事实上,这就是我在模板中使用的方法:P你能解释一下你为什么需要这个吗?因为我感觉你从错误的方向处理问题。我允许在模板中替换用户指定的值数组。模板可能包含诸如::first_name::之类的标记。我认为,对于用户来说,提供一组纯英文键比包含冒号的键更具可读性。我会使用%name%而不是::事实上,这就是我在模板中使用的方法:p标记化函数不起作用,因为数组映射会将$person数组的元素传递给它,而不是$person数组本身。啊,好的。我不知道。嗯,你总是可以数组_键和数组_值。谢谢你的评论。tokenize函数不起作用,因为array_map会将$person数组的元素传递给它,而不是$person数组本身。啊,好的。我不知道。嗯,你总是可以数组_键和数组_值。感谢您的评论。用户以标签列表的形式提供数组。就像您在stackoverflow问题上放置的标记一样,用户在表单中以标记列表的形式提供数组。就像你在问题上贴的标签一样。