说我有一个数组:
$array = Array(
'foo' => 5,
'bar' => 12,
'baz' => 8
);
我想在我的视图中打印一行文字:
“值为:foo(5),bar(12),baz(8)”
我能做的就是:
$list = Array();
foreach ($array as $key => $value) {
$list[] = "$key ($value)";
}
echo 'The values are: '.implode(', ',$list);
但我觉得应该有一个更简单的方法,而不必创建$list
数组作为额外的步骤。我一直在尝试array_map
和array_walk
,但没有成功。
所以我的问题是:这样做的最佳和最短的方法是什么?
答案 0 :(得分:19)
array_map
的问题是回调函数不接受密钥作为参数。您可以编写自己的函数来填补空白:
function array_map_assoc( $callback , $array ){
$r = array();
foreach ($array as $key=>$value)
$r[$key] = $callback($key,$value);
return $r;
}
现在你可以这样做:
echo implode(',',array_map_assoc(function($k,$v){return "$k ($v)";},$array));
答案 1 :(得分:9)
是的一种方式,但it's pretty verbose(可能效率低下):
<?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)
));
?>
您的原始代码对我来说很好。
答案 2 :(得分:8)
对我而言,最好和最简单的解决方案是:
$string = http_build_query($array, '', ',');
答案 3 :(得分:4)
您可以在迭代时打印出来的值:
echo 'The values are: ';
foreach ($array as $key => $value) {
$result .= "$key ($value),";
}
echo rtrim($result,',');
答案 4 :(得分:1)
从@linepogl的答案中获取帮助,我编辑了代码以使其更简单,并且工作正常。
function array_map_assoc($array){
$r = array();
foreach ($array as $key=>$value)
$r[$key] = "$key ($value)";
return $r;
}
然后,只需使用
调用该函数echo implode(' , ', array_map_assoc($array));
答案 5 :(得分:1)
很明显, Roberto Santana 提出的解决方案是最有用的。只有一个任命者,如果要使用它来解析html属性(例如数据),则需要双引号。这是一种方法:
Example: var_dump( '<td data-'.urldecode( http_build_query( ['value1'=>'"1"','value2'=>'2' ], '', ' data-' ) ).'></td>');
Output: string '<td data-value1="1" data-value2=2></td>' (length=39)
答案 6 :(得分:0)
我想出了
foreach ($array as &$item)
{
$item = reset($item);
}
$array = implode(', ', $array);
var_dump($array);