0

次のような多次元配列があります。

array(
    0 => array(
            'id' => '6',
            'name' => 'Looper',
            'language' => 'hindi'), 
    1 => array(
            'id' => '7',
            'name' => 'Rush',
            'language' => 'hindi'),
    2 => array(
            'id' => '6',
            'name' => 'Looper',
            'language' => 'hindi'));

そこで、同じ値の配列を削除したいのですが、次のようになります。

array(
    0 => array(
            'id' => '6',
            'name' => 'Looper',
            'language' => 'hindi'), 
    1 => array(
            'id' => '7',
            'name' => 'Rush',
            'language' => 'hindi'));

解決策を得るのを手伝ってください。

4

4 に答える 4

2

array_unique()PHPで単一の多次元配列から重複するエントリを削除するために使用できます

于 2012-10-20T03:50:46.927 に答える
0

わかりました、多分あなたは unset(array[2]) で試すことができます、これは配列から要素を削除しますhttp://php.net/manual/en/function.unset.php

于 2012-10-20T03:48:27.933 に答える
0

キーを保持するために変数に渡し、次を使用して確認しますin_array

function assc_array_filter($array, $id)
{
    $keys = array();
    foreach($array as $index => $arr)
    {
        if(in_array($arr[$id], $keys))
        {
            unset($array[$index]);
        }
        else
        {
            $keys[] = $arr[$id];
        }
    }
    return $array;
}

関数を次のように呼び出す

print_r(assc_array_filter($arr, 'id'));




---- UPDATED : スイッチを使用してarray_search

上記のコードは、配列で見つかった「2 番目のセット」ではなく、配列の最初のセットを返すため、見つかった「最初のセット」を更新できるようにパラメーターを追加しました。

function assc_array_filter($array, $id, $last_updated = false, $strict = false)
{
    $keys = array();
    foreach($array as $index => $arr)
    {
        if(($in_index = array_search($arr[$id], $keys, $strict)) !== false )
        {
            if($last_updated)
            {
                $array[$in_index] = $arr;
            }
            unset($array[$index]);
        }
        else
        {
            $keys[] = $arr[$id];
        }
    }
    return $array;
}

として呼び出す

print_r(assc_array_filter($arr, 'id', true));
于 2012-10-20T03:55:50.103 に答える
0
$oldarr = array(
    0 => array(
            'id' => '6',
            'name' => 'Looper',
            'language' => 'hindi'), 
    1 => array(
            'id' => '7',
            'name' => 'Rush',
            'language' => 'hindi'),
    2 => array(
            'id' => '6',
            'name' => 'Looper',
            'language' => 'hindi'));

$newarr = array();
foreach( $oldarr as $v ) if( !in_array( $v, $newarr ) ) $newarr[] = $v;
print_r( $newarr );

これで問題は解決します。PHP 4.2 以降、in_array() は最初のパラメーターとして配列を受け取ります。array_unique() は、このソリューションでは機能しません.. php.net から:

于 2012-10-20T03:56:02.577 に答える