0

それぞれ次の形式の約 5000 個の配列要素を保持する配列があります。

Array
        (
            [keywordid] => 98
            [keyword] => sample keyword 34
            [type] => NATURAL
            [longname] => UK
        )

次のような数値を保持する2番目の配列があります。

Array
(
    [0] => 55
    [1] => 56
    [2] => 57
    [3] => 58
    [4] => 59
    [5] => 1065
    [6] => 1066
    [7] => 1067
    [8] => 1083
)

上記の配列の各値は、最初の配列の各配列内の「keywordid」値に対応します。最初の配列を並べ替えて、keywordid の値が 2 番目の配列の要素と一致する配列が最初に表示され、その後に残りの配列が指定された順序で表示されないようにします。どうすればこれを達成できますか? PHP 5.3 を使用していますが、下位互換性は必須ではありません。

助けに感謝します。

4

2 に答える 2

2

私はおそらくusortを使用します

usort($array1, function($a, $b) use($array2) {
    $k1 = array_search($a['keywordid'], $array2);
    $k2 = array_search($b['keywordid'], $array2);

    if ($k1 == $k2) {
        return 0;
    }
    return ($k1 < $k2) ? -1 : 1;
});

おそらくもっと良い方法がありますが、それが最初に思い浮かびました。

于 2013-09-25T11:27:37.260 に答える
-1

このコードを試して、その配列を操作してください。

<?php
//here I assume you have more than one array
$array = array (
            0=> array (
            "keywordid" => 98,
            "keyword" => "sample keyword 34",
            "type" => "NATURAL",
            "longname" => "UK"),
            1=> array (
            "keywordid" => 95,
            "keyword" => "sample keyword 95",
            "type" => "NATURAL 02",
            "longname" => "US"),
            2=> array (
            "keywordid" => 55,
            "keyword" => "sample keyword 55",
            "type" => "NATURAL 02",
            "longname" => "AU")

        );

//populate array into new variable
foreach ( $array  as $key=> $val){
    $out[] = $val["keywordid"];
}

echo "<pre>";
print_r($out);
echo "</pre>";  

?>

出力は次のとおりです。

Array
(
    [0] => 98
    [1] => 95
    [2] => 55
)
于 2013-09-25T11:36:22.913 に答える