1

PHP配列といくつかの比較に少し問題があります。私の悪い英語でごめんなさい:(

画像管理システムを構築しています。一度に複数の写真を選択し、選択したすべての写真の情報を編集できます。ただし、一部のフィールドは既に入力されています。特定のフィールドに複数の画像の異なる情報が入力されている場合は、ユーザーに「*」文字を表示したいと思います。

私の問題は次のとおりです。 - 選択したすべての写真の mySQL クエリ結果を含む 2 次元配列があります (この数はもちろん不定です)。結果の配列の例を次に示します。

Array
(

[0] => Array
    (
        [Folder_id] => 40
        [Title_fr] => test
        [Title_en] => 
        [Desc_fr] => 
        [Desc_en] => 
        [Place_fr] => Koksijde, Belgique
        [Place_en] => Koksijde, Belgium
        [Place_ICAO] => EBBE
        [Place_city] => 
        [Place_country] => be
    )

[1] => Array
    (
        [Folder_id] => 40
        [Title_fr] => test
        [Title_en] => 
        [Desc_fr] => 
        [Desc_en] => 
        [Place_fr] => Koksijde, Belgique
        [Place_en] => Koksijde, Belgium
        [Place_ICAO] => EBBE
        [Place_city] => 
        [Place_country] => be
    )

[2] => Array
    (
        [Folder_id] => 40
        [Title_fr] => test
        [Title_en] => 
        [Desc_fr] => 
        [Desc_en] => 
        [Place_fr] => Koksijde, Belgique
        [Place_en] => Koksijde, Belgium
        [Place_ICAO] => EBBE
        [Place_city] => 
        [Place_country] => be
    )

[3] => Array
    (
        [Folder_id] => 51
        [Title_fr] => test
        [Title_en] => 
        [Desc_fr] => 
        [Desc_en] => 
        [Place_fr] => FRANC
        [Place_en] => ANGLE
        [Place_ICAO] => ENGL
        [Place_city] => Münich2
        [Place_country] => de
    )

ご覧のとおり、すべてのレコードに共通のフィールドもあれば、異なるフィールドもあります。たとえば、[Place_fr] はすべてのレコードで同じではありませんが、[Desc_fr] は同じです。

すべてのフィールドをキーとして配列を返し、このフィールドがレコード間で異なる値を含む場合は値として '*' を返し、すべてのレコードに共通の場合は値を返す関数をコーディングしたいと思います。

たとえば、ここでの結果は次のようになります。

 Array
 ( 
        [Folder_id] => *
        [Title_fr] => test
        [Title_en] => 
        [Desc_fr] => 
        [Desc_en] => 
        [Place_fr] => *
        [Place_en] => *
        [Place_ICAO] => *
        [Place_city] => *
        [Place_country] => *
 )

これは、array_diff_assoc() を使用して実行できることを知っています。2 つの配列で行うのは非常に簡単です。問題は、この関数に無数の引数を渡す必要があり、これをどのように解決できるかわかりません。

初歩的な質問で申し訳ありません-私は配列に関しては初心者です。

助けてくれてありがとう !

4

2 に答える 2

1

これはそれを行う必要があります:

// get common keys => values
$common  = call_user_func_array('array_intersect_assoc', $arr);

// and append missing keys to them, with "*" values
$common += array_fill_keys(array_keys($arr[0]), '*');

$arr(それが上記の配列であると仮定します)

于 2013-02-08T16:31:23.340 に答える
0
$arrays = array (
    array (
        "Folder_id" => 40,
        "Title_fr" => "test",
        "Title_en" => "",
        "Desc_fr" => "",
        "Desc_en" => "",
        "Place_fr" => "Koksijde, Belgique",
        "Place_en" => "Koksijde, Belgium",
        "Place_ICAO" => "EBBE",
        "Place_city" => "",
        "Place_country" => "be"
    ),
    array (
        "Folder_id" => 40,
        "Title_fr" => "test",
        "Title_en" => "",
        "Desc_fr" => "",
        "Desc_en" => "",
        "Place_fr" => "Koksijde, Belgique",
        "Place_en" => "Koksijde, Belgium",
        "Place_ICAO" => "EBBE",
        "Place_city" => "",
        "Place_country" => "be"
    ),
    array (
        "Folder_id" => 40,
        "Title_fr" => "test",
        "Title_en" => "",
        "Desc_fr" => "",
        "Desc_en" => "",
        "Place_fr" => "Koksijde, Belgique",
        "Place_en" => "Koksijde, Belgium",
        "Place_ICAO" => "EBBE",
        "Place_city" => "",
        "Place_country" => "be"
    ),
    array (
        "Folder_id" => 51,
        "Title_fr" => "test",
        "Title_en" => "",
        "Desc_fr" => "",
        "Desc_en" => "",
        "Place_fr" => "FRANC",
        "Place_en" => "ANGLE",
        "Place_ICAO" => "ENGL",
        "Place_city" => "Münich2",
        "Place_country" => "de"
    )
);

function compare($arrays) {
    foreach ($arrays as $array) {
        foreach ($array as $key => $value) {
            if (!isset($result[$key])) {
                $result[$key] = $value;
            } else if ($result[$key] !== "*") {
                if ($value !== $result[$key]) {
                    $result[$key] = "*";
                }
            }
        }
    }
    return $result;
}

echo "<pre>";
print_r(compare($arrays));
echo "</pre>";
于 2013-02-08T16:18:12.663 に答える