我有以下数组:
$person = array('first_name' => 'Fred', 'last_name' => 'Flintstone');
我想更改/填充键,以便数组最终为(注意额外的冒号):
$person = array('::first_name::' => 'Fred', '::last_name::' => 'Flintstone');
出于某种原因,我在最简单的方法上画了一个空白
答案 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"
}