2012-06-14 44 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")); 
相關問題