PHPプログラミング

レシピ

配列

配列を1つの文字列に変換する

配列の要素をimpload関数を使って1つの文字列に変換する方法について解説します。

この記事のポイント

  • implode関数で配列の要素を任意の文字で区切った1つの文字列に変換する
  • 連想配列についても要素のみ文字列に変換されるため、添字(キー)は文字列に含まれない
  • implode関数は多次元配列には対応していない

目次

配列を1つの文字列にする

implode関数を使うと、配列の値を1つの文字列に変換することができます。
以下の例では配列$idsに入っている4つの値を1つの文字列に変換して、URLパラメータとして連結します。

PHP コード例

<?php

// 文字列に変化する配列
$ids = array(
  12345,
  22345,
  33445,
  55123
);

// 変換の実行
$api_url = 'https://api.gray-code.com/message/?ids=' . implode( ',', $ids);

var_dump($api_url);
// string(62) "https://api.gray-code.com/message/?ids=12345,22345,33445,55123"

上記のようにAPIのリクエストURLを作るときなどに、パラメータを全て配列に入れてimplode関数で文字列にまとめるときに活用することができます。

implode関数は第1パラメータに区切り文字、第2パラメータに配列を指定します。
配列に入っている全ての要素は、区切り文字を挟んだ1つの文字列に変換することができます。
区切り文字は「,」以外の任意の文字列を指定することができます。

連想配列を1つの文字列にする

連想配列でも要素を1つの文字列にすることができます。
ただし要素のみで文字列を作成するため、添字(キー)は文字列に含まれません。

コード例

<?php

// 文字列に変化する配列
$data = array(
  'id' => 12345,
  'name' => 'Taro',
  'created_at' => '2010-01-01 00:10:05'
);

// 変換の実行
var_dump( implode( ',', $data));
// string(30) "12345,Taro,2010-01-01 00:10:05"

挙動は添字(キー)が数値の配列と全く同じです。

多次元配列を1つの文字列にする

多次元配列については、そのままimplode関数の第2パラメータに渡しても変換することはできません。
2次元以上の配列を文字列に変換したいときは、foreach文などのループ処理で子孫要素のみimplode関数で変換します。

以下の例では配列$dataに入っている2次元配列に対して、foreach文implode関数を組み合わせて1つの文字列を作成します。
親要素は「|」で区切り、子要素はimplode関数で指定した「,」で区切ります。

コード例

<?php

// 返還後の文字列を入れる変数
$res = null;

// 文字列に変化する配列
$data = array(
  array(
    'id' => 12345,
    'name' => 'Taro',
    'created_at' => '2010-01-01 00:10:05'
  ),
  array(
    'id' => 35245,
    'name' => 'Kana',
    'created_at' => '2010-01-02 00:35:12'
  ),
  array(
    'id' => 52992,
    'name' => 'Shota',
    'created_at' => '2010-01-03 09:05:22'
  )
);

// foreach文で子要素を参照する
foreach( $data as $key => $value ) {

  // 1つ目の子要素のみ
  if( $key === 0 ) {
    $res = implode(',', $value);

  // 2つ目以降の子要素
  } else {
    $res .= '|' . implode(',', $value);
  }
}

// 作成した文字列を出力
var_dump($res);
// string(97) "12345,Taro,2010-01-01 00:10:05|35245,Kana,2010-01-02 00:35:12|52992,Shota,2010-01-03 09:05:22"

こちらの記事は役に立ちましたか?

ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。

コメントありがとうございます!
運営の参考にさせていただきます。