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问题上放置的标记一样,用户在表单中以标记列表的形式提供数组。就像你在问题上贴的标签一样。