0

私はどのように疑問に思っています:

  • カンマ区切りのリストを作成する
  • リストから最後のコンマを削除します

配列の例を次に示します。

Array
(
    [name] => Array
        (
            [0] => Some message to display1
        )
    [test] => Array
        (
            [0] => Some message to display2
        )
    [kudos] => Array
        (
            [0] => Some message to display3
        )

)

このように表示したい:

カンマリスト: Some message to display1, Some message to display2, Some message to display3

4

7 に答える 7

2

配列をループし、implode()各配列を取得した後。

$bigArray = array();
foreach($firstArray as $secondArray){
    if(is_array($secondArray)){
        $bigArray = array_merge($bigArray, $secondArray);
    }
}
$commaList = implode(",", $bigArray);
于 2012-08-02T16:10:51.333 に答える
1

したがって、実際にあなたの質問に対処するために私の答えを修正すると、次のようにネストされたforeachループでそれを行うことができます:

<?php

$a1 = array(
    'name' => array( 0 => 'Some message to display1'),
    'test' => array( 0 => 'Some message to display2'),
    'kudos' => array( 0 => 'Some message to display3'),
    );

$final = "";
foreach($a1 as $innerarray){
    foreach($innerarray as $message){
        $final .= $message.", ";
    }
}

echo substr($final,0,-2);
?>
于 2012-08-02T16:08:28.070 に答える
1

implode値を結合しarray_mapて抽出するために使用できます。

// this should be your array
$youArray = array(); 
// return first elements
$values = array_map(function($item) { return $item[0]; }, $youArray); 
// echo joined values
echo implode(',', $values);
于 2012-08-02T16:12:41.790 に答える
0
$array = array("some text","other text");
$impl = implode(",", $array);
echo $impl;
于 2012-08-02T16:07:35.497 に答える
0

implode1Dアレイで動作しますが、2Dアレイがある場合は、もう少し作業が必要になります。

array_map配列をフラット化するために使用できます

$flatArray = array_map(function($a){
    // I implode here just in case the arrays
    // have more than one element, if it's just one
    // you can return '$a[0];' instead
    return implode(',', $a);
}, $array);

echo implode(',', $flatArray);
于 2012-08-02T16:12:52.343 に答える
0

これは配列で機能し、 nレベルの深さの配列で機能するはずです。

$array = array(
    'name' => array('Some message to display1'),
    'test' => array('Some message to display2'),
    'kudos' => array('Some message to display3')
);

$mystr =  multi_join($array);
while (substr($mystr, -1) == ',') {
    $mystr = substr($mystr, 0, -1);
}
echo $mystr;

function multi_join($value) {
    $string = '';

    if (is_array($value)) {
        foreach ($value as $el) {
            $string.= multi_join($el);
        }
    } else {
        $string.= $value.',';
    }

    return $string;
}
于 2012-08-02T16:27:26.793 に答える
0

このヒープに追加するいくつかの追加のテクニックがあります...

  1. splatオペレーターは連想キーを好まないため、最初のレベルのインデックスを再作成してから、解凍されたサブ配列をマージして内破します。

  2. を使用array_reduce()して、最初のレベルを反復し、各サブアレイから最初の要素を抽出します。必要に応じて、を使用せずに区切りますimplode()

コード:(デモ

$array = [
    'name' => ['Some message to display1'],
    'test' => ['Some message to display2'],
    'kudos' => ['Some message to display3']
];

echo implode(', ', array_merge(...array_values($array)));

echo "\n---\n";

echo array_reduce($array, function($carry, $item) {return $carry .= ($carry ? ', ' : '') . $item[0]; }, '');

出力:

Some message to display1, Some message to display2, Some message to display3
---
Some message to display1, Some message to display2, Some message to display3

最初の手法はサブアレイ内の複数の要素に対応し、2番目の手法はサブアレイごとに複数の「メッセージ」を確認しません。

于 2018-12-01T12:51:15.300 に答える