0

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

<?php 
$array = array(
array('first' => 1, 'second' => 1),
array('first' => 1, 'second' => 1),
array('first' => 2, 'second' => 1),
array('first' => 3, 'second' => 1),
array('first' => 3, 'second' => 1),
array('first' => 3, 'second' => 1));

first重複した値を削除するにはどうすればよいですか? 重複したsecond値を保持しながら。

処理後、配列は次のようになります。

array(
array('first' => 1, 'second' => 1),
array('first' => 2, 'second' => 1),
array('first' => 3, 'second' => 1));

参照: http://codepad.org/tMh28KMf

4

4 に答える 4

1

コード:

$array = array(
    array('first' => 1, 'second' => 1),
    array('first' => 1, 'second' => 1),
    array('first' => 2, 'second' => 1),
    array('first' => 2, 'second' => 1),
    array('first' => 3, 'second' => 1),
    array('first' => 3, 'second' => 1)
);

$temp = array();
$new = array();

foreach($array as $value)
{
    if(!in_array($value['first'],$temp))
    {
        $temp[] = $value['first'];
        $new[] = $value;
    } 
}

現在$new、以下が含まれています。

array(
    array('first' => 1, 'second' => 1),
    array('first' => 2, 'second' => 1),
    array('first' => 3, 'second' => 1),
);
于 2012-07-04T14:41:08.130 に答える
0

いくつかのforeachループを実行して、配列を自分で再構築する必要があります。PHP のarray_unique()もチェックしてください。

于 2012-07-04T14:38:51.750 に答える
0

配列がこのような場合はどうなりますか

$array = array(
    array('first' => 1, 'second' => 1),
    array('first' => 1, 'second' => 1),
    array('first' => 1, 'second' => 12),
    array('first' => 2, 'second' => 1),
    array('first' => 2, 'second' => 1),
    array('first' => 3, 'second' => 1),
    array('first' => 3, 'second' => 1)
);

$temp = array();
$new = array();

新しい配列 $new には以下が含まれます。

array(
    array('first' => 1, 'second' => 1),
    array('first' => 2, 'second' => 1),
    array('first' => 3, 'second' => 1),
);

また

array(
    array('first' => 1, 'second' => 1),
    array('first' => 1, 'second' => 12),
    array('first' => 2, 'second' => 1),
    array('first' => 3, 'second' => 1),
);

?

于 2012-07-05T10:39:29.580 に答える
0

これにより、重複した配列が削除されます。

$array = array_map('unserialize', array_unique(array_map('serialize', $array)));

キーはまだ同じなので、修正する必要があるかもしれません。

于 2012-07-04T14:42:31.207 に答える