说我有一个数组:
$array = Array(
'foo' => 5,
'bar' => 12,
'baz' => 8
);
Run Code Online (Sandbox Code Playgroud)
我想在我的视图中打印一行文字,如下所示:
"价值观是:foo(5),bar(12),baz(8)"
我能做的是:
$list = Array();
foreach ($array as $key => $value) {
$list[] = "$key ($value)";
}
echo 'The values are: '.implode(', ',$list);
Run Code Online (Sandbox Code Playgroud)
但我觉得应该有一个更简单的方法,而不必创建$list数组作为额外的步骤.我一直想array_map和array_walk,但没有成功.
所以我的问题是:最好和最短的方法是什么?
lin*_*ogl 21
问题array_map是回调函数不接受键作为参数.您可以编写自己的函数来填补这里的空白:
function array_map_assoc( $callback , $array ){
$r = array();
foreach ($array as $key=>$value)
$r[$key] = $callback($key,$value);
return $r;
}
Run Code Online (Sandbox Code Playgroud)
现在你可以这样做:
echo implode(',',array_map_assoc(function($k,$v){return "$k ($v)";},$array));
Run Code Online (Sandbox Code Playgroud)
Rob*_*ana 12
对我来说,最好和最简单的解决方案是:
$string = http_build_query($array, '', ',');
Run Code Online (Sandbox Code Playgroud)
有是一种方式,但它是相当冗长(和可能效率较低):
<?php
$array = Array(
'foo' => 5,
'bar' => 12,
'baz' => 8
);
// pre-5.3:
echo 'The values are: '. implode(', ', array_map(
create_function('$k,$v', 'return "$k ($v)";'),
array_keys($array),
array_values($array)
));
echo "\n";
// 5.3:
echo 'The values are: '. implode(', ', array_map(
function ($k, $v) { return "$k ($v)"; },
array_keys($array),
array_values($array)
));
?>
Run Code Online (Sandbox Code Playgroud)
您的原始代码对我来说很好.
您可以在迭代时打印出这些值:
echo 'The values are: ';
foreach ($array as $key => $value) {
$result .= "$key ($value),";
}
echo rtrim($result,',');
Run Code Online (Sandbox Code Playgroud)