2

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

Array
(
    [userId] => 35
    [fieldId] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [3] => 1
            [4] => 2
            [5] => 2
            [6] => 1
            [7] => 4
        )

    [educationTitle] => Array
        (
            [0] => School1
            [1] => School2
            [2] => 3
            [3] => School1
            [4] => School2
            [5] => School2
            [6] => School1
            [7] => 
        )
)

各配列の重複をすべて削除したい。したがって、最終的な配列は次のようになります。

Array
(
    [userId] => 35
    [fieldId] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [7] => 4
        )

    [educationTitle] => Array
        (
            [0] => School1
            [1] => School2
            [2] => 3
            [7] => 
        )
)

私はこれを試しました(この回答で推奨されているようにhttps://stackoverflow.com/a/307701/1009116):

  function multi_unique($updates) {
    foreach ($updates as $k=>$na)
        $new[$k] = serialize($na);
    $uniq = array_unique($new);
    foreach($uniq as $k=>$ser)
        $new1[$k] = unserialize($ser);
    return ($new1);
}

しかも効果なし

私もこれを試しました(ここで推奨されているように - https://stackoverflow.com/a/946300/1009116

$input = array_map("unserialize", array_unique(array_map("serialize", $input)));

そして、これは最後の配列を返すだけです(ただし、本来あるべきようにフィルタリングされます)

私は何を間違っていますか???

4

3 に答える 3

3

array_combine()この場合、使用できます。後で、データをそれぞれのコンテナーに分解します。

$combined = array_combine($arr['fieldId'], $arr['educationTitle']);

$arr['fieldId'] = array_keys($combined);
$arr['educationTitle'] = array_values($combined);

この操作の後、元のインデックスの番号が付け直されることに注意してください。

于 2013-03-29T00:06:26.120 に答える
3

使用できます:

$data = array(
        'userId' => 35,
        'fieldId' => array(
                0 => 1,
                1 => 2,
                2 => 3,
                3 => 1,
                4 => 2,
                5 => 2,
                6 => 1,
                7 => 4
        ),
        'educationTitle' => array(
                0 => 'School1',
                1 => 'School2',
                2 => 3,
                3 => 'School1',
                4 => 'School2',
                5 => 'School2',
                6 => 'School1',
                7 => NULL
        )
);

print_r(arrayUnique($data));

出力

Array
(
    [userId] => 35
    [fieldId] => Array
        (
            [0] => 1
            [1] => 2
            [2] => 3
            [7] => 4
        )

    [educationTitle] => Array
        (
            [0] => School1
            [1] => School2
            [2] => 3
            [7] => 
        )

)

使用する機能

function arrayUnique($array) {
    $input = array_map("unserialize", array_unique(array_map("serialize", $array)));
    foreach ( $input as $key => $value ) {
        is_array($value) and $input[$key] = arrayUnique($value);
    }
    return $input;
}
于 2013-03-29T00:07:07.830 に答える
0

array_flip(); を使用する別の方法。

<?php
    $myArray = array( "userID"=>'35',
    "fieldID" => array(
    "0" => '1',"1" => '2',
    "2" => '3',"3" => '1',
    "4" => '2',"5" => '2',
    "6" => '1',"7" => '4'),
    "educationTitle"=>array(
    "0"=>'School1',"1"=>'School2',
    "2"=>'3',"3"=>'School1',
    "4"=>'School2',"5"=>'School2',
    "6"=>'School1',"7"=>'',),);

    print_r($myArray);

    $myArray['fieldID'] = array_flip($myArray['fieldID']);
    $myArray['fieldID'] = array_flip($myArray['fieldID']);
    $myArray['educationTitle'] = array_flip($myArray['educationTitle']);
    $myArray['educationTitle'] = array_flip($myArray['educationTitle']);

    print_r($myArray);
?>

最終出力

Array
(
    [userID] => 35
    [fieldID] => Array
        (
            [6] => 1
            [5] => 2
            [2] => 3
            [7] => 4
        )

    [educationTitle] => Array
        (
            [6] => School1
            [5] => School2
            [2] => 3
            [7] => 
        )

)
于 2013-03-29T00:58:14.407 に答える