【问题标题】:merge_array returns null if one or more of arrays is empty?如果一个或多个数组为空,merge_array 返回 null?
【发布时间】:2013-11-11 18:03:32
【问题描述】:

我会让你快速了解我在做什么。

我正在使用带有advanced custom fields 插件的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 之前尝试过var_dump($gallery_location); var_dump($gallery_studio); 吗?
  • @zessx - 我刚刚更新了我的问题,这是因为其中一个数组是空的,导致合并返回 null 整体:/

标签: php arrays wordpress advanced-custom-fields


【解决方案1】:

您可以使用以下方式合并您的数组:

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

【讨论】:

    【解决方案2】:

    array_merge 只接受数组作为参数。如果您的参数之一为空,则会引发错误:

    警告: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 Sandbox

    【讨论】:

    • 这似乎不会导致 null 问题,请在底部查看我上面的问题,我已经转储了所有内容,因此您可以查看返回的空数组。感谢您迄今为止的帮助。
    • 有一个错字(downlads 而不是downloads),但它应该可以工作,see this PHP sandbox
    • 我非常爱你,伙计,这现在可以工作了 - 抱歉,我注意力不集中,这是代表我的廉价复制和粘贴。谢谢你的帮助。 +1
    • 添加 (array) 绝对是处理 +1 的更好方法
    • 请注意,由于?: 运算符现在可用,因此也可以使用array_merge($a1 ?: [], $a2 ?: [], $a3 ?: [], $a4 ?: []);,这与强制转换为(array) 基本相同,但输入要少一些
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-17
    • 2013-11-26
    • 2022-01-12
    • 2012-12-31
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多