Merge_array возвращает null, если один или несколько массивов пуст?

Я быстро убежу от того, что делаю.

Я использую wordpress с плагином дополнительных настраиваемых полей. Это вопрос на основе php, потому что эти поля get_field() содержат массивы объектов.

$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 );

Я объединяю несколько массивов, но если один из массивов пуст, это приводит к тому, что массив слияния полностью возвращает null!

Мой вопрос: как я могу остановить merge_array, возвращающий значение null, некоторые из массивов пустые?

Заранее благодарим за любые идеи.


@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, если я пытаюсь использовать оба ваших решения ниже, это не сработает?

Ответы

Ответ 1

array_merge принимает только массивы в качестве параметров. Если один из ваших параметров равен NULL, это вызовет ошибку:

Предупреждение: array_merge(): Аргумент #x не является массивом...

Эта ошибка не будет повышаться, если один из массивов пуст. Пустым массивом остается массив.

Два варианта:

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

Ответ 2

Вы можете использовать следующий способ слияния массивов:

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