如果一个或多个数组为空,merge_array是否会返回null?

36

我会简单介绍一下我的工作内容。

我正在使用 WordPress 和 advanced custom fields 插件。这是一个基于 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 前面尝试过 var_dump($gallery_location); var_dump($gallery_studio); 吗? - zessx
@zessx - 我刚刚更新了我的问题,因为其中一个数组为空,导致合并后总体返回 null :/ - Joshc
2个回答

78

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沙盒


这似乎并没有解决空值问题,请查看我在底部上面的问题,我已经转储了所有内容,以便您可以看到空数组返回的内容。感谢迄今为止的帮助。 - Joshc
有一个错别字(downlads 而不是 downloads),但它应该可以工作,请参见此 PHP 沙盒 - zessx
我非常喜欢你,伙计,现在它可以工作了 - 抱歉我刚才有点专注,这是我自己的一个廉价复制粘贴。谢谢你的帮助,伙计。+1 - Joshc
添加(array)无疑是处理这个+1的更好方式。 - AO_
2
只是一个提示,由于现在可用 ?: 运算符,因此可以执行 array_merge($a1 ?: [], $a2 ?: [], $a3 ?: [], $a4 ?: []);,这本质上与强制转换为 (array) 相同,但少打一些字符。 - billrichards

4
您可以使用以下方法合并您的数组:
$c = (array)$a + (array)$b

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接