1

私は次の配列を持っています:

Array
(
    [0] => 147
    [1] => hello
    [2] => Asia/Kolkata
    [3] => Upcoming
)


Array
(
    [0] => 148
    [1] => hello world
    [2] => Asia/Karachi
    [3] => Live
)


Array
(
    [0] => 147
    [1] => ABCD
    [2] => Asia/Colombo
    [3] => NA
)

上記の配列はデータベースから取得され、最後の 6 番目の値は API から動的に取得されます。配列プッシュを使用して、その値をデータベース配列にプッシュしました。

以下のコードを参照してください。

function compareArrayItems($a, $b) {
$order = array(
"Live",
"Upcoming",
"NA"
);
$aWeight = array_search($a[9], $order);
$bWeight = array_search($b[9], $order);
if ($aWeight === false || $bWeight === false || $aWeight === $bWeight)
return 0;
return $aWeight < $bWeight ? 1 : - 1;
}                                           

$sArr = array();
while ($kj = mysqli_fetch_array($result)) {
$arrk = get_status_for_hashtag($kj['start_time'], $kj['end_time'], $kj['day'], $kj['timezone']);
array_push($kj, $arrk);
$sArr[] = $kj;
}                       

usort($sArr, "compareArrayItems");

ここでのステ​​ータスは、近日中、ライブ中、NA という最後の値に他なりません。現在、データベースに従って通常の方法で並べ替えが行われていますが、ステータスが最後の値を意味するに従ってこれを並べ替えたいと考えています。ライブが最初に来て、次の 2 番目と NA 3 番目に来てほしいです。ステータスがデータベースから取得されていないため、オーダーバイクエリを使用することはできません。それはAPIから来ており、データベース配列とマージするだけです。

あなたが私の主張を理解してくれることを願っています。

ありがとう。

4

2 に答える 2

2

カスタムの比較と値を提供するusortを使用できます。$cmp_function$a[3]$b[3]

アップデート

使用例を次に示します。

$arr = array(
    array(147, "hello", "Asia/Kolkata", "Upcoming"),
    array(148, "hello world", "Asia/Karachi", "Live"),
    array(147, "ABCD", "Asia/Colombo", "NA"),
);
print_r($arr);
usort($arr, "compareArrayItems");
print_r($arr);

配列アイテムを「Live」、「Upcoming」、「NA」の順に並べ替えるカスタム関数:

function compareArrayItems($a, $b)
{
    $order = array(
        "Live",
        "Upcoming",
        "NA"
    );
    $aWeight = array_search($a[3], $order);
    $bWeight = array_search($b[3], $order);
    if ($aWeight === false || $bWeight === false || $aWeight === $bWeight)
        return 0;
    return $aWeight > $bWeight ? 1 : - 1;
}

コールバックの詳細については、このページを参照してください。

于 2013-04-12T18:10:49.217 に答える