在PHP中使用关联数组

时间:2011-07-02 12:28:41

标签: php

说我有一个数组:

$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_maparray_walk,但没有成功。

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

7 个答案:

答案 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);