内爆数组值?

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'))

【讨论】:

以上是关于内爆数组值?的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 查询:Php 内爆数组字符串值 [重复]

在php中使用数组和内爆函数的自定义查询

将 MySQL 内爆数组中的项目与查询中的 PHP 数组匹配

内爆一个没有第一个元素的数组

内爆形式元素数组

用键内爆关联数组的最快方法