web-dev-qa-db-fra.com

merge_array renvoie null si un ou plusieurs tableaux sont vides?

Je vais vous donner un aperçu rapide de ce que je fais.

J'utilise wordpress avec le plugin champs personnalisés avancés . Il s'agit d'une question basée sur php car ces champs get_field() contiennent des tableaux d'objets.

$gallery_location   = get_field('gallery_location');
$gallery_studio = get_field('gallery_studio');

Par exemple $gallery_location lorsque vidée renverra ceci ...

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
}

J'utilise ensuite merge_array pour fusionner les deux objets ...

$gallery_location = get_field('gallery_location');
$gallery_studio = get_field('gallery_studio');

$downloads = array_merge( $gallery_location, $gallery_studio );

Je fusionne plusieurs tableaux mais si l'un des tableaux est vide, le tableau de fusion retourne entièrement null!

Ma question est de savoir comment puis-je empêcher merge_array de retourner null si certains des tableaux sont vides?

Merci d'avance pour toutes les idées.


@zessx

C'est ce que je reviens ...

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


et ce sont les résultats des vidages ci-dessus dans le même ordre ...

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


Comme vous pouvez le voir $downloads renvoie toujours null, si j'essaie d'utiliser à la fois votre solution ci-dessous, cela ne fonctionne pas?

22
Joshc

array_merge accepte uniquement les tableaux en tant que paramètres. Si l'un de vos paramètres est nul, cela générera une erreur:

Avertissement: array_merge (): l'argument #x n'est pas un tableau ...

Cette erreur ne sera pas déclenchée si l'un des tableaux est vide. Un tableau vide est toujours un tableau.

Deux options :

1/Forcer le type à être array

$downloads = array_merge( (array)$gallery_location, (array)$gallery_studio );

2/Vérifiez si les variables sont des tableaux

$downloads = array();
if(is_array($gallery_location))
    $downloads = array_merge($downloads, $gallery_location);
if(is_array($gallery_studio ))
    $downloads = array_merge($downloads, $gallery_studio);

Sandbox PHP

56
zessx

Vous pouvez utiliser la méthode suivante pour fusionner vos tableaux:

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