Самый простой способ взорвать() двумерный массив?
Я новичок в 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
.
Ответы
Ответ 1
Это изменяет ваш массив, используя 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
Ответ 2
Вы попросили двухмерный массив, вот функция, которая будет работать для многомерного массива.
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
Ответ 3
// simplest
$str = implode(',',array_map('implode',$arr));
Ответ 4
Команда одной строки
implode(',', array_map('implode', $arr, array_fill(0, count($arr), '')))
Ответ 5
Если вы просто захотите взорвать один "столбец", как в этом случае, то самое простое:
implode(",", array_column($array,"tag_id"));
Ответ 6
Обратите внимание на приведенное ниже руководство 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}";
.
Ответ 7
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;
}