PHP独特的多维数组问题

时间:2017-08-25 15:48:48

标签: php arrays multidimensional-array

因此,我使用以下函数从MD数组中获取唯一值:

    function unique_multidim_array($array, $key) { 
        $temp_array = array(); 
        $i = 0; 
        $key_array = array();           
        foreach( $array as $val ) { 
            if ( ! in_array( $val[$key], $key_array ) ) { 
                $key_array[$i] = $val[$key]; 
                $temp_array[$i] = $val; 
            }
            $i++; 
        } 
        return $temp_array; 
    } 

我的数组类似于以下内容:

Array (
    [0] =>
        Array (
            'name' => 'Nevada'
        )
    [1] =>
        Array (
            'name' => 'Colorado'
        )
    [2] =>
        Array (
            'name' => 'Nevada'
        )
    [3] =>
        Array (
            'name' => 'Colorado'
        )
    [4] =>
        Array (
            'name' => 'Oklahoma'
        )
    [5] =>
        Array (
            'name' => 'Nevada'
        )
    [6] =>
        Array (
            'name' => 'Nevada'
        )
)

使用上面的函数(unique_multidim_array ( $term_arr, 'name' ))我得到一个Nevada和一个Colorado但是,它没有返回Oklahoma

即使没有重复项,我该怎么做才能确保它会返回唯一值?

2 个答案:

答案 0 :(得分:1)

PHP已经有一个从数组中删除重复项的功能

x = x[::-1]

应该做的伎俩

答案 1 :(得分:1)

您生成的数组会保留原始索引,并且,根据您对其进行迭代的方式,您可能会得到意外的结果。尝试重置索引:

function unique_multidim_array($array, $key) { 
    $temp_array = array(); 
    $i = 0; 
    $key_array = array();           
    foreach( $array as $val ) { 
        if ( ! in_array( $val[$key], $key_array ) ) { 
            $key_array[$i] = $val[$key]; 
            $temp_array[] = $val; // <--- remove the $i
        }
        $i++; 
    } 
    return $temp_array; 
}

或者,正如您所说,array_values()也会有所帮助:

$term_arr = array_values ( unique_multidim_array ( $term_arr, 'name' ) );