22

私はPHPを初めて使用しますが、PHPがどのように機能するかについてはあまり理解していません。2次元配列自体(データベースから返される)がある場合:

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ループを持っていますが、それが1行で実行できることを望んでいました。標準implodeは私に与えますArray,Array,Array

4

7 に答える 7

33

これは、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));

コードパッドデモ

于 2012-06-14T17:30:31.960 に答える
8

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
于 2015-01-07T01:57:12.377 に答える
7
// simplest
$str = implode(',',array_map('implode',$arr));
于 2016-12-25T06:57:28.377 に答える
5

この場合のように、単一の配列「列」を単純に内破したい場合、最も簡単な方法は次のとおりです。

implode(",", array_column($array,"tag_id")); 
于 2017-07-11T15:48:29.280 に答える
2

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}";ください。

于 2012-06-14T17:30:25.223 に答える
2

1行のコマンド

implode(',', array_map('implode', $arr, array_fill(0, count($arr), '')))
于 2016-07-08T07:05:07.163 に答える
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;
}
于 2016-02-06T15:56:58.073 に答える