Я дам вам быстрый контроль над тем, что я делаю.
Я использую 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, если я пытаюсь использовать оба ваших решения ниже, это не работает?
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 Песочница
Вы можете использовать следующий способ слияния массивов:
$c = (array)$a + (array)$b