Я новичок в 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; }