2012-06-14 42 views
17

我是PHP的新手,对于它的工作方式并没有太大的把握。如果我有一个二维数组作为这样的(由数据库返回的):implode()一个二维数组最简单的方法?

array(3) { 
    [0]=> array(1) {   
     ["tag_id"]=> string(1) "5" 
    } 
    [1]=> array(1) {   
     ["tag_id"]=> string(1) "3" 
    } 
    [2]=> array(1) {   
     ["tag_id"]=> string(1) "4" 
    } 
} 

,并希望把它变成字符串5,3,4这将是不这样做的最快方法是什么?我目前有一个令人厌恶的foreach循环,但希望能够在一行中完成。标准implode给我Array,Array,Array

+3

您可以删除所有换行符在'foreach'。 –

+0

我想说的是,如果某件事情使用了几行,你就不应该在意。 –

+1

@ Xeon06虽然我在原则上达成一致,但我想看看是否有更好的方法可以做得更好。这个项目的一半是学习,另一半是实际编码。 (更好的是,我可以删除所有换行符并告诉我的老板代码只需要一行代码) – SomeKittens

回答

23

这会使用array_map修改您的阵列,但可能通过将其变为tag_id的一维阵列来更好地进行修改。然后,你可以用爆正常人一样:

$arr = array_map(function($el){ return $el['tag_id']; }, $arr); 
$str = implode(',', $arr); 

如果你不希望修改阵列比你可以这样做:

$str = implode(',', array_map(function($el){ return $el['tag_id']; }, $arr)); 

Codepad Demo

+1

那么,你实际上可以将'array_map'的结果传递给'implode'调用。 ) – raina77ow

+0

@ raina77ow是的,但我认为修改原始数组可能会更好,因为额外的维度看起来毫无用处。我会尽快更新我的答案:) – Paulpro

1

退房下面从PHP implode() manual

<?php 
/** 
* Implode an array with the key and value pair giving 
* a glue, a separator between pairs and the array 
* to implode. 
* @param string $glue The glue between key and value 
* @param string $separator Separator between pairs 
* @param array $array The array to implode 
* @return string The imploded array 
*/ 
function array_implode($glue, $separator, $array) { 
    if (! is_array($array)) return $array; 
    $string = array(); 
    foreach ($array as $key => $val) { 
     if (is_array($val)) 
      $val = implode(',', $val); 
     $string[] = "{$key}{$glue}{$val}"; 

    } 
    return implode($separator, $string); 

} 
?> 

如果你只想要返回值(而不是键),仅修改上面使用$string[] = "{$val}";

6

你问了两个维数组,这里是一个可用于多维数组的函数。

function implode_r($g, $p) { 
    return is_array($p) ? 
      implode($g, array_map(__FUNCTION__, array_fill(0, count($p), $g), $p)) : 
      $p; 
} 

我可以拼合的阵列结构,如下所示:

$multidimensional_array = array(
    'This', 
    array(
     'is', 
     array(
      'a', 
      'test' 
     ), 
     array(
      'for', 
      'multidimensional', 
      array(
       'array' 
      ) 
     ) 
    ) 
); 

echo implode_r(',', $multidimensional_array); 

结果是:

This,is,a,test,for,multidimensional,array 
0
function recursive_implode($connector=',', $array=[], $implod='keys'){ 

    if($implod=='keys'){ 

     $results=implode($connector,array_keys($array)); 
    } 
    else{ 

     $results=implode($connector,$array); 
    } 

    foreach($array as $key=> $value){ 

     if(is_array($value)){ 

      $results.=$connector.recursive_implode($connector,$value,$implod); 
     } 
    } 

    return $results; 
} 
2

一行命令

implode(',', array_map('implode', $arr, array_fill(0, count($arr), ''))) 
4
// simplest 
$str = implode(',',array_map('implode',$arr)); 
2

如果一个人只是想爆单个阵列“列”在这种情况下,然后做最简单的事情是:

implode(",", array_column($array,"tag_id")); 
相关问题