dpw70180 2012-11-16 10:16
浏览 65
已采纳

PHP:将两个数组相交并获取两者的值

So I am a bit stuck here, I can do it with foreach loop but I want to find a cleverer way of doing it.

Update: There was something that I've missed in the question. The arrays may come in random order and in different length thus having different keys. Examples below updated.

Here is the case:

Array1

array (
    slug1 => England,
    slug2 => France,
    slug3 => Italy,
    slug4 => Germany,
)

Array2

array (
    slug2 => 215,
    slug1 => 168,
    slug4 => 55,
    slug5 => 149,
    slug3 => 40,
    slug6 => 137,
)

I want to intersect those arrays and build new one which has the following elements:

array (
    168 => England,
    215 => France,
    40 => Italy,
    55 => Germany,
)

Note: elements are not ordered though that could be achieved easily.

  • 写回答

5条回答 默认 最新

  • douzhang1926 2012-11-16 10:18
    关注

    Answer to Original Question

    You can use array_combine it creates an array by using one array for keys and another for its values

    $array1 = array(
            "slug1" => "England",
            "slug2" => "France",
            "slug3" => "Italy",
            "slug4" => "Germany");
    
    $array2 = array(
            "slug1" => "168",
            "slug2" => "215",
            "slug3" => "40",
            "slug4" => "55");
    
    $final = array_combine($array2, $array1);
    
    echo "<pre>";
    print_r($final);
    

    Output

    Array
    (
        [168] => England
        [215] => France
        [40] => Italy
        [55] => Germany
    )
    

    See Live Demo

    Answer to Updated Question

    Update: There was something that I've missed in the question. The arrays may come in random order and in different length thus having different keys. Examples below updated.

    $array1 = array(
            "slug1" => "England",
            "slug2" => "France",
            "slug3" => "Italy",
            "slug4" => "Germany");
    
    $array2 = array (
            "slug2" => 215,
            "slug1" => 168,
            "slug4" => 55,
            "slug5" => 149,
            "slug3" => 40,
            "slug6" => 137);
    
    
    
    $final = customCombine($array2, $array1);
    
    echo "<pre>";
    print_r($final);
    

    Output

    Array
    (
        [215] => France
        [168] => England
        [55] => Germany
        [40] => Italy
    )
    

    Function Used

    function customCombine($keys, $arr) {
        $t = array();
        foreach ( $keys as $k => $val ) {
            isset($arr[$k]) and $t[$val] = $arr[$k];
        }
        return $t;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?