内爆数组值?
Posted
技术标签:
【中文标题】内爆数组值?【英文标题】:Implode array values? 【发布时间】:2011-06-18 18:41:00 【问题描述】:所以,我有一个这样的数组:
Array
(
[0] => Array
(
[name] => Something
)
[1] => Array
(
[name] => Something else
)
[2] => Array
(
[name] => Something else....
)
)
有没有一种简单的方法可以将值内爆成字符串,如下所示:
echo implode(', ', $array[index]['name']) // result: Something, Something else, Something else...
没有使用循环连接值,如下所示:
foreach ($array as $key => $val)
$string .= ', ' . $val;
$string = substr($string, 0, -2); // Needed to cut of the last ', '
【问题讨论】:
@Rafe Kettler:是的,但它只适用于一维数组。 【参考方案1】:您可以使用常见的array_map()
技巧来“展平”多维数组,然后implode()
“展平”结果,但是当您调用array_map()
时,php 在内部仍会循环遍历您的数组。
function get_name($i)
return $i['name'];
echo implode(', ', array_map('get_name', $array));
【讨论】:
是的,但是 PHP 的速度要快得多。谢谢。 最好使用array_pop()。如果为您的第二层数组提供了额外的键,则不能保证“名称”键将是堆栈中的第一个键。防御性编程 FTW。 另一方面,如果您对在命名空间中创建新函数持怀疑态度,请使用闭包或 create_function。 echo implode(', ', array_map(create_function('$a', 'return $a["name"];'), $array)); 关于第二条评论,您的观点非常好,但在这种情况下,单打解决方案就可以了。是的,我对为这种用法创建函数有点怀疑。你看,我正在学习 OOP,所以我对何时何地使用“正常”函数感到困惑。您的最后一条评论解决了这个问题。我希望我能接受两个帖子。【参考方案2】:最简单的方法,当内部数组中只有一项时:
$values = array_map('array_pop', $array);
$imploded = implode(',', $values);
【讨论】:
我得到 array_pop() 期望参数 1 是数组,给定字符串 @DhanuK 我没有看到代码,但我会大胆猜测您有一个包含项目的数组而不是包含项目的数组。【参考方案3】:在 PHP 5 >= 5.5.0
implode(', ', array_column($array, 'name'))
【讨论】:
以上是关于内爆数组值?的主要内容,如果未能解决你的问题,请参考以下文章