繁体   English   中英

内爆()二维数组的最简单方法是什么?

[英]Easiest way to implode() a two-dimensional array?

我是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修改您的数组,但可能通过将其转换为tag_id的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));

键盘演示

你问了一个二维数组,这是一个适用于多维数组的函数。

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_column($array,"tag_id")); 

一行命令

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM