2

だから私は、4 つの配列を組み合わせた小さな php アプリケーションに取り組んでいます。現在、可能な配列の一部が null になる可能性があります。4 つの配列を一意にマージするために、次の解決策を試しました。

<?php
$a = [1,2,3,4,5];
$b = null;
$c = [5,4,3,2,1];
$d = [1,2];

$new_array;

if(is_array($a) && is_array($b) && is_array($c) && is_array($d))
{
    $new_array =  array_unique(array_merge($a,$b,$c,$d));
}else if(is_array($a) && is_array($b) && is_array($c))
{
        $new_array =  array_unique(array_merge($a,$b,$c));
}else if(is_array($a) && is_array($b))
{   
    $new_array =  array_unique(array_merge($a,$b));
}else{
    $new_array = $a;
}

print_r($new_array);
?>

null 変数を除外しながら、配列のすべての可能な組み合わせに対応していないという点で、コードが非常に機能不全であることにすぐに気付きました。

どうすればこれを解決できますか。配列であるすべての変数がマージされ、そうでない変数が破棄されるようにします。ありがとう

4

3 に答える 3

5

これはどう?すべての配列を配列に入れて、それらすべてを簡単にループし、custom in_array()関数を使用してそれらが既に存在するかどうかを確認できますか?

この方法の良い点は、スクリプトが 4 つの配列だけに制限されないことです。これは、まとめたすべての配列をループ処理するためです。

$a = [1,2,3,4,5];
$b = null;
$c = [5,4,3,2,1];
$d = [1,2];

$array_stack = array($a, $b, $c, $d);

$new_array = array();

foreach($array_stack as $stack){
    if(!is_array($stack)) continue;
    foreach($stack as $value){
        if(!in_array($value, $new_array)) $new_array[] = $value;
    }
}

print_r($new_array);
于 2013-09-30T07:36:31.793 に答える
3

maybe something like this :

<?php

$a = [1,2,3,4,5];
$b = null;
$c = [5,4,3,2,1];
$d = [1,2];

$new_array;

if(is_array($a)) $new_array = $a;
if(is_array($b)) $new_array =  array_unique(array_merge($new_array,$b));
if(is_array($c)) $new_array =  array_unique(array_merge($new_array,$c));
if(is_array($d)) $new_array =  array_unique(array_merge($new_array,$d));
?>
于 2013-09-30T07:32:20.197 に答える
0

古い質問ですが、とにかく私の意見を述べます。より普遍的なアプローチ:

function multiple_array_merge() {
    $args = func_get_args();

    $array = [];
    foreach ($args as $i) {
        if (is_array($i)) $array = array_merge($array, $i);
    }

    return array_unique($array);
}

$a = [1, 2, 3, 4, 5];
$b = null;
$c = [5, 4, 3, 2, 1];
$d = [1, 2];

$merged = multiple_array_merge($a, $b, $c, $d);
于 2015-09-25T15:09:30.403 に答える