0

重複した多次元配列をカウントし、この重複を削除して、新しいインデックスで重複カウントをプッシュする必要があります。

次の配列があるとします。

Array
(
[0] => Array
    (
        [segments] => Array
            (
                [1] => Gcia de Auditoría Interna
                [0] => Auditoria Interna 1
            )

        [groups] => Array
            (
                [estados] => sp
                [cidade] => sumpaulo
            )

    )

[1] => Array
    (
        [segments] => Array
            (
                [2] => Gerencia Recursos Humanos
                [1] => Gcia Dpto Admin de Pers. y Rel. Laboral
                [0] => SubGcia Administración de Personal
            )

        [groups] => Array
            (
                [estados] => sp
                [cidade] => 
            )

    )

[2] => Array
    (
        [segments] => Array
            (
                [2] => Gerencia Recursos Humanos
                [1] => Gcia Dpto Admin de Pers. y Rel. Laboral
                [0] => SubGcia Administración de Personal
            )

        [groups] => Array
            (
                [estados] => sp
                [cidade] => 
            )

    )


 )

重複する配列を削除し、新しいインデックス カウントを作成したい:

Array
(
[0] => Array
    (
        [segments] => Array
            (
                [1] => Gcia de Auditoría Interna
                [0] => Auditoria Interna 1
            )

        [groups] => Array
            (
                [estados] => sp
                [cidade] => sumpaulo
            )
        [total] = 1

    )

[1] => Array
    (
        [segments] => Array
            (
                [2] => Gerencia Recursos Humanos
                [1] => Gcia Dpto Admin de Pers. y Rel. Laboral
                [0] => SubGcia Administración de Personal
            )

        [groups] => Array
            (
                [estados] => sp
                [cidade] => 
            )
         [total] = 2

    )

 )

出来ますか?

4

3 に答える 3

1

この機能は動作します:

function deduplicate($array) {
    foreach($array as $key => $subArray) { // First Part
        for($i = 0; $i < $key; $i++) {
            if (print_r($subArray, true) == @print_r($array[$i], true)) {
                unset($array[$i]);
            }
        }
    }
    $i = 0;                                // Second Part
    foreach($array as $subArray) {
        $newArray[$i] = $subArray;
        $i++;
    }
    return $newArray;
}

パート 1: 1 行目で関数を宣言します。2 行目は、配列のすべての要素を実行するループを開始し、3 行目のループをforeach使用してチェックされるように、その前の要素と一致するかどうかを確認し、4 行目のステートメントでチェックします。4 行目で実際に行うことは、配列の値を比較して重複しているかどうかを確認するだけでなく、 を使用してそれらを文字列に変換します。文字列が一致する場合、5 行目で重複要素を削除 ( ) します。チェックしている2番目の要素がすでに削除されている場合、エラーが発生する可能性があるため、エラーが発生するのを防ぎます。6、7、8 行目で、ループ、ループ、およびステートメントのコード ブロックを閉じます。これで、重複のない配列ができました。forifprint_runsets@forforeachif

パート 2: 9 行目で変数を宣言します。この変数は、 12 行目のループを$i実行するたびにインクリメントされます。このインクリメント変数は、新しい配列の各要素の新しいキーになります。10 行目はループを開始し、パート 1 で生成された重複を除いて配列をループします。11 行目は、新しい配列の各要素 (再インデックスされたもの) を、ループがパート 1 の配列内で見つけた次の要素に設定します。12 行目はインクリメントします。、すでに述べたように。13 行目でループのコード ブロックを閉じます。14 行目で新しい配列を返し、15 行目で関数を閉じます。これにより、重複する最初の次元要素がすべて削除された、再インデックスされたバージョンの配列が残ります。foreach$i++;$iforeachforeach$iforeach

これで、簡潔でエレガントな方法が得られ、それがどのように機能するかが正確にわかりました。これをコピーして PHP の先頭に貼り付けます。これを行う必要がある配列がある場合は、次のようにします。

$array = deduplicate($array);
于 2013-06-19T06:31:21.843 に答える
0

@通行人

この方法でも機能しました

foreach($csv as $lines){
        $segstring = implode("+", $lines["segments"]);
        $groupstring = implode("+", $lines["groups"]);


        if(!isset($recsv[$segstring."+".$groupstring]["total"])){
            $recsv[$segstring."+".$groupstring] = $lines;
            $recsv[$segstring."+".$groupstring]["total"] = 0;
        }
        $recsv[$segstring."+".$groupstring]["total"]++;

    }

あなたは何を言っていますか?

于 2013-06-19T04:56:50.443 に答える