怎么样将 array 的 key 统一加上前缀 ?

2014-04-30 11:13:41 +08:00
 yakczh
比如
$array = array("version" => "1.1",
"connection" => "close");

变成

Array
(
[http_version] => 1.1
[http_connection] => close
)

用array_walk

$test_array = array("version" => "1.1",
"connection" => "close");
array_walk($test_array, function($a, &$b) { $b = "http_".$b; });

var_dump($test_array);

$test_array没变化


array_map貌似不处理key
4129 次点击
所在节点    PHP
8 条回复
oott123
2014-04-30 11:18:03 +08:00
你在回调里这样:
unset($arr[$b]);
$arr[new] = $a;
oott123
2014-04-30 12:39:11 +08:00
@oott123 似乎无视了 php 的闭包,OTL ,楼主 use 吧,或者 foreach …
bingu
2014-04-30 14:28:34 +08:00
手册的array_walk范例差不多就符合你的要求了吧。

Example #1 array_walk() 例子

<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");

function test_alter(&$item1, $key, $prefix)
{
$item1 = "$prefix: $item1";
}

function test_print($item2, $key)
{
echo "$key. $item2<br />\n";
}

echo "Before ...:\n";
array_walk($fruits, 'test_print');

array_walk($fruits, 'test_alter', 'fruit');
echo "... and after:\n";

array_walk($fruits, 'test_print');
?>
以上例程会输出:

Before ...:
d. lemon
a. orange
b. banana
c. apple
... and after:
d. fruit: lemon
a. fruit: orange
b. fruit: banana
c. fruit: apple
yakczh
2014-04-30 14:35:05 +08:00
@bingu 是修改key
yakczh
2014-04-30 14:37:39 +08:00
@oott123
array_walk($test_array, function($a, $b) use (&$test_array) {


unset($test_array[$b]);
$test_array['http_'.$b]=$a;
});

出来是 Array
(
[connection] => close
[http_http_version] => 1.1
)

如果是
array_walk($test_array, function(&$a, $b) use (&$test_array) {
//unset($test_array[$b]);
$test_array['http_'.$b]=$a;
});
则没反应了
icanc
2014-04-30 15:10:03 +08:00
$test_array = call_user_func(
function (Closure $callback,$array){
$results = array();
foreach ($array as $key => $value){
list($innerKey, $innerValue) = call_user_func($callback, $key, $value);
$results[$innerKey] = $innerValue;
}
return $results;
},
function($k,$v){ return array('http_'.$k,$v);},
$test_array // 原始数组
);
manhere
2014-04-30 21:12:28 +08:00
批量的添加 和 不添加 有什么区别?
pubby
2014-05-01 23:16:36 +08:00
$test_array = array_combine(
array_map(function($k){ return 'http_'.$k;},array_keys($test_array)),
array_values($test_array)
);

var_dump($test_array);

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/110612

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX