2013-10-31 142 views
16

我會給你快速運行我所做的。如果一個或多個數組爲空,merge_array返回null?

我使用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,如果我嘗試使用下面兩個是你的解決方案不起作用?

+0

看起來不錯。你有沒有嘗試過'var_dump($ gallery_location); var_dump($ gallery_studio);'就在'array_merge'之前? – zessx

+0

@zessx - 我剛剛更新了我的問題,這是因爲其中一個數組是空的,這會導致合併全部返回null:/ – Joshc

回答

44

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

+0

這似乎不會導致null問題,請在底部查看我的問題,已經拋棄了一切,所以你可以看到空數組返回的是什麼。感謝您一直以來的幫助。 – Joshc

+0

有一個錯字('downlads'而不是'downloads'),但它應該可以工作,[見這個PHP沙箱](http://sandbox.onlinephpfunctions.com/code/7512b59a0e08de604fcb1a87e8ba68d2fb1e57f3) – zessx

+0

我非常愛你現在的作品 - 對不起,我很專注,這是一個便宜的複製和粘貼我的名義。謝謝你幫助男人。 +1 – Joshc

0

您可以使用以下方法合併您的陣列:

$c = (array)$a + (array)$b 
相關問題