Самый простой способ взорвать () двумерный массив?

Я новичок в PHP и не совсем понимаю, как это работает. Если у меня есть двухмерный массив как таковой (возвращаемый базой данных):

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 .

Это изменяет ваш массив с помощью array_map , но, вероятно, к лучшему, превратив его в 1D-массив tag_id . Тогда вы можете просто использовать implode как обычно:

 $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

Вы попросили двухмерный массив, вот функция, которая будет работать для многомерного массива.

 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 
 // simplest $str = implode(',',array_map('implode',$arr)); 

Одна строка

 implode(',', array_map('implode', $arr, array_fill(0, count($arr), ''))) 

Если вы просто хотите взорвать один «столбец» массива, как в этом случае, то самое простое:

 implode(",", array_column($array,"tag_id")); 

Ознакомьтесь с нижеприведенным руководством PHP implode () :

 <?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}"; ,

 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; }