1

これは私のコードです。

        if(in_array("1", $mod)){ 
        $res=array('First Name','Insertion','Last Name','Lead Country');}

       if(in_array("2", $mod)){ 
        $res=array('Landline No:','Mobile No:','Lead Country');}

        if(in_array("3", $mod)){ 
        $res=array('City','State','Country','Lead Country');}

        if(in_array("4", $mod)){ 
        $res=array('Email','Lead Country');}

        return $res;

ここまでは正常に動作します。ただし、配列に (1,3) などの複数の値が含まれている場合は、1 と 3 の両方の結果を返す必要があります。

例: 配列がこのような場合

    array([0]=>1 [1]=>3)

それから

    $res=array('First Name','Insertion','Last Name','City','State','Country','Lead Country') 

しかし、リード国が 2 つある場合、1 つだけを表示する必要があります。これを行う方法は? 助けてください。

4

3 に答える 3

1

関数を使用して要素を追加する例を次に示します。要素がまだ存在しない場合にのみ追加します。

    function addItems($items, $arr)
    {
        foreach($items as $value)
        {
            if(!in_array($value, $arr))
            {
                $arr[] = $value;
            }
        }

        return $arr;
    }

    $res = array();

    if(in_array("1", $mod)){ 
    $res = addItems(array('First Name','Insertion','Last Name','Lead Country'), $res);}

    if(in_array("2", $mod)){ 
    $res = addItems(array('Landline No:','Mobile No:','Lead Country'), $res);}

    if(in_array("3", $mod)){ 
    $res = addItems(array('City','State','Country','Lead Country'), $res);}

    if(in_array("4", $mod)){ 
    $res = addItems(array('Email','Lead Country'), $res);}

    return $res;

これは、よりOOPであり、おそらくもう少し論理的です。これは、配列全体を前後に渡し続けるのではなく、代わりに配列を保持するオブジェクトを使用し、それに追加するメソッドを持っているためです。最終結果を取得します。

    class ItemsManager
    {
        protected $items = array();

        public function addItems($items)
        {
            foreach($items as $value)
            {
                if(!in_array($value, $this->items))
                {
                    $this->items[] = $value;
                }
            }
        }

        public function getItems()
        {
            return $this->items;
        }
    }

    $im = new ItemsManager();

    if(in_array("1", $mod)){ 
    $im->addItems(array('First Name','Insertion','Last Name','Lead Country'));}

    if(in_array("2", $mod)){ 
    $im->addItems(array('Landline No:','Mobile No:','Lead Country'));}

    if(in_array("3", $mod)){ 
    $im->addItems(array('City','State','Country','Lead Country'));}

    if(in_array("4", $mod)){ 
    $im->addItems(array('Email','Lead Country'));}

    return $im->getItems();
于 2012-10-22T10:52:16.423 に答える
1

使用array_merge:

$res = array();
if(in_array("1", $mod)){
    $res=array_merge($res, array('First Name','Insertion','Last Name','Lead Country'));
}

// and so on ...

return $res;
于 2012-10-22T10:41:12.910 に答える
1

array_merge を使用して結果を構築します...

    $res = array();

    if(in_array("1", $mod)) { 
        $res = array_merge($res, array('First Name','Insertion','Last Name','Lead Country'));
    }

    // etc
于 2012-10-22T10:42:36.390 に答える