127

foreach がなければ、どうすればこのように配列を変えることができますか

array("item1"=>"object1", "item2"=>"object2",......."item-n"=>"object-n");

このような文字列に

item1='object1', item2='object2',.... item-n='object-n'

私はすでに考えましimplode()たが、それではキーが内破しません。

foreach が必要な場合、foreach をネストしないことは可能ですか?

編集:文字列を変更しました


EDIT2/UPDATE: この質問はかなり前に尋ねられました。当時、私はすべてを 1 行で書きたかったので、foreach を優先して、三項演算子とネスト組み込み関数呼び出しを使用しました。それは良い習慣ではありませんでした!簡潔かどうかはそれほど重要ではありません。

この場合、 foreach を関数に入れると、ワンライナーを書くよりもはるかに読みやすく、モジュール化されます(すべての答えが素晴らしいですが!)。

4

12 に答える 12

225

次のように、http_build_queryを使用できます。

<?php
  $a=array("item1"=>"object1", "item2"=>"object2");
  echo http_build_query($a,'',', ');
?>

出力:

item1=object1, item2=object2 

デモ

于 2012-07-11T07:20:45.863 に答える
205

そして別の方法:

$input = array(
    'item1'  => 'object1',
    'item2'  => 'object2',
    'item-n' => 'object-n'
);

$output = implode(', ', array_map(
    function ($v, $k) {
        if(is_array($v)){
            return $k.'[]='.implode('&'.$k.'[]=', $v);
        }else{
            return $k.'='.$v;
        }
    }, 
    $input, 
    array_keys($input)
));

また:

$output = implode(', ', array_map(
    function ($v, $k) { return sprintf("%s='%s'", $k, $v); },
    $input,
    array_keys($input)
));
于 2012-07-11T07:23:42.577 に答える
9

serialize()またはを使用しますjson_encode()

必要な正確な結果文字列は得られませんが、後でエンコード/保存/取得/デコードする方がはるかに簡単です。

于 2012-07-11T07:13:34.967 に答える
3

array_walk の使用

$a = array("item1"=>"object1", "item2"=>"object2","item-n"=>"object-n");
$r=array();
array_walk($a, create_function('$b, $c', 'global $r; $r[]="$c=$b";'));
echo implode(', ', $r);

イデオネ

于 2012-07-11T07:28:24.773 に答える
2

変化する

-    return substr($result, (-1 * strlen($glue)));
+    return substr($result, 0, -1 * strlen($glue));

最後の $glue なしで文字列全体を復元したい場合

function key_implode(&$array, $glue) {
    $result = "";
    foreach ($array as $key => $value) {
        $result .= $key . "=" . $value . $glue;
    }
    return substr($result, (-1 * strlen($glue)));
}

そして使用法:

$str = key_implode($yourArray, ",");
于 2012-07-11T07:16:46.530 に答える
2

クラスを使用した簡単な例を次に示します。

$input = array(
    'element1'  => 'value1',
    'element2'  => 'value2',
    'element3' =>  'value3'
);

echo FlatData::flatArray($input,', ', '=');

class FlatData
{

    public static function flatArray(array $input = array(), $separator_elements = ', ', $separator = ': ')
    {
        $output = implode($separator_elements, array_map(
            function ($v, $k, $s) {
                return sprintf("%s{$s}%s", $k, $v);
            },
            $input,
            array_keys($input),
            array_fill(0, count($input), $separator)
        ));
      return $output;
    }

}
于 2018-05-04T15:30:43.387 に答える