在 PHP 中内爆关联数组

php
2022-08-30 13:20:04

假设我有一个数组:

$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);

但我觉得应该有一种更简单的方法,而不必将数组创建为额外的步骤。我一直在尝试,但没有成功。$listarray_maparray_walk

所以我的问题是:这样做的最好和最短的方法是什么?


答案 1

问题在于回调函数不接受键作为参数。你可以编写自己的函数来填补这里的空白: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));

答案 2

对我来说,最好和最简单的解决方案是这样的:

$string = http_build_query($array, '', ',');

http_build_query (php.net)


推荐