83

我是 PHP 的新手,我需要快速解决以下问题,但似乎想不出一个:

我有一个像这样的多维数组

Array
(
    [0] => Array
        (
            [blogTags_id] => 1
            [tag_name] => google
            [inserted_on] => 2013-05-22 09:51:34
            [inserted_by] => 2
        )

    [1] => Array
        (
            [blogTags_id] => 2
            [tag_name] => technology
            [inserted_on] => 2013-05-22 09:51:34
            [inserted_by] => 2
        )
)

我想使用implode()以某种方式返回一个逗号分隔的字符串,其中包含tag_name这样的键值。

google, technology

使用上述功能是否可以达到这种效果?如果没有,请提出替代解决方案。

4

7 回答 7

193

非常简单:

$input = array(
  array(
    'tag_name' => 'google'
  ),
  array(
    'tag_name' => 'technology'
  )
);

echo implode(', ', array_map(function ($entry) {
  return $entry['tag_name'];
}, $input));

http://3v4l.org/ltBZ0


和 php v5.5.0 中的新功能array_column

echo implode(', ', array_column($input, 'tag_name'));
于 2013-05-23T09:57:15.143 回答
18

尽管这个问题与字符串转换有关,但我在想要一种简单的方法将数组写入我的日志文件时偶然发现了这个问题。如果您只想要信息,而不关心字符串的确切清洁度,您可能会考虑:

json_encode($array)
于 2018-01-18T23:45:12.567 回答
9

array_map是一个回调函数,您可以在其中使用传递的数组。这应该有效。

$str = implode(',', array_map(function($el){ return $el['tag_id']; }, $arr));
于 2013-11-27T19:26:29.550 回答
8
join(',', array_map(function (array $tag) { return $tag['tag_name']; }, $array))
于 2013-05-23T09:57:08.750 回答
6

很简单

$str;
foreach ($arrays as $arr) {
$str .= $arr["tag_name"] . ",";
}
$str = trim($str, ',');//removes the final comma 
于 2015-10-17T05:41:13.930 回答
3

如果您希望“tag_name”与关联的“blogTags_id”使用:(PHP > 5.5)

$blogDatas = array_column($your_multi_dim_array, 'tag_name', 'blogTags_id');
echo implode(', ', array_map(function ($k, $v) { return "$k: $v"; }, array_keys($blogDatas), array_values($blogDatas)));
于 2017-08-25T21:35:43.637 回答
1

在这种情况下 implode($array,','); 将起作用,因为您只需要这些值。在为我工作的 PHP 5.6 中。

如果您想将键和值合并为一个,例如:
blogTags_id: 1 tag_name
: google

$toImplode=array();
foreach($array as $key => $value) {
$toImplode[]= "$key: $value".'<br>';
}
$imploded=implode('',$toImplode);

对不起,我理解错了,因为标题“从多维数组中插入数据”。好吧,我的回答仍然以某种方式回答它,可能会对某人有所帮助,所以不会删除它。

于 2018-01-22T22:35:30.510 回答