web-dev-qa-db-ja.com

1つ以上の配列が空の場合、merge_arrayはnullを返しますか?

私がやっていることを簡単に説明します。

wordpress 高度なカスタムフィールド プラグインで使用しています。これらのget_field()フィールドにはオブジェクト配列が含まれているため、これはphpベースの質問です。

$gallery_location   = get_field('gallery_location');
$gallery_studio = get_field('gallery_studio');

例えば ​​$gallery_locationダンプするとこれが返されます...

array(18) {
  [0]=>
  array(10) {
    ["id"]=>
    int(126)
    ["alt"]=>
    string(0) ""
    ["title"]=>
    string(33) "CBR1000RR STD Supersport 2014 001"
    ["caption"]=>
    string(0) ""
    ["description"]=>
    string(0) ""
    ["mime_type"]=>
    string(10) "image/jpeg"
    ["url"]=>
    string(94) "http://www.example.com/wp/wp-content/uploads/2013/10/CBR1000RR-STD-Supersport-2014-001.jpg"
    ["width"]=>
    int(7360)
    ["height"]=>
    int(4912)
  }
... on so fourth
}

次に、merge_arrayを使用して両方のオブジェクトをマージしています...

$gallery_location = get_field('gallery_location');
$gallery_studio = get_field('gallery_studio');

$downloads = array_merge( $gallery_location, $gallery_studio );

複数の配列をマージしていますが、配列の1つが空の場合、これによりマージ配列が完全にnullを返します!

私の質問は、いくつかの配列が空であるときにnullを返すmerge_arrayを停止するにはどうすればよいですか?

アイデアをお寄せいただきありがとうございます。


@zessx

これは私が返すものです...

$gallery_location   = get_field( 'gallery_location' );
$gallery_studio     = get_field( 'gallery_studio' );

$downloads = array_merge( $gallery_location, $gallery_studio );

var_dump($gallery_location);

var_dump($gallery_studio);

var_dump($downloads);


これらは同じ順序で上記のダンプの結果です...

string(0) ""


array(18) {
  [0]=>
  array(10) {
    ["id"]=>
    int(126)
    ["alt"]=>
    string(0) ""
    ["title"]=>
    string(33) "CBR1000RR STD Supersport 2014 001"
    ["caption"]=>
    string(0) ""
    ["description"]=>
    string(0) ""
    ["mime_type"]=>
    string(10) "image/jpeg"
    ["url"]=>
    string(94) "http://www.example.com/wp/wp-content/uploads/2013/10/CBR1000RR-STD-Supersport-2014-001.jpg"
    ["width"]=>
    int(7360)
    ["height"]=>
    int(4912)
  }
... on so fourth
}


NULL


ご覧のように $downloadsは、nullを返していますが、下の両方のソリューションを使用しようとしても機能しませんか?

22
Joshc

array_mergeは、パラメーターとして配列のみを受け入れます。パラメータの1つがnullの場合、エラーが発生します:

警告:array_merge():引数#xは配列ではありません...

配列の1つが空の場合、このエラーは発生しません。空の配列は依然として配列です。

2つのオプション:

1 /型を強制的にarrayにする

$downloads = array_merge( (array)$gallery_location, (array)$gallery_studio );

2 /変数が配列かどうかを確認する

$downloads = array();
if(is_array($gallery_location))
    $downloads = array_merge($downloads, $gallery_location);
if(is_array($gallery_studio ))
    $downloads = array_merge($downloads, $gallery_studio);

PHPサンドボックス

56
zessx

配列をマージするには、次の方法を使用できます。

$c = (array)$a + (array)$b