1

すでにソートされている配列があります。

ここで、サブ配列値が0のすべての配列を取得し、それらを配列の先頭に配置します。

これは私がやろうとしたことです:

        foreach($dealStatsArray as $deal_id => $dealStats)
        {
            if($dealStats['revenueY'] == 0)
            {

                $tmpArray[$deal_id] = $dealStats; // Store the array
                unset($dealStatsArray[$deal_id]); // Unset the current one, since it is not in right position

                array_unshift($dealStatsArray, $tmpArray); // Prepend the tmp array, to have it at the beginning of the array
            }
        }

ここで問題となるのは、array_unshift()が次のことを行うことです。

「すべての数値配列キーは、ゼロからカウントを開始するように変更されます」 -php net array_unshift()

インデックスを$dealStatsArrayに保持する必要があるため、取得した残りのコードを台無しにします。新しい先頭に追加された配列のインデックスは、0ではなく$deal_idである必要があります。

これどうやってするの?そして、array_push(appending)で正常に機能するのと同じように、配列の先頭に2〜3回先頭に追加できるソリューションが必要です。ただし、先頭に追加するだけです。

更新:これが私の現在のuasort関数で、revenueY値の後に配列を並べ替えているため、最大数が配列の先頭にあり、次に降順になります。

function cmp($a, $b)
{
    if (($a["revenueY"]) == ($b["revenueY"])) {
        return 0;
    }
    return (($a["revenueY"]) > ($b["revenueY"])) ? -1 : 1;
}

uasort($dealStatsArray, "cmp");

部分的に機能する@thaJeztahの回答に従うと、次のように追加されます。

function sortbyRevenueY($a, $b) {
    if ($a['revenueY'] == $b['revenueY']) {
       return 0;
    }
    return ($a['revenueY'] == 0) ? -1 : 1;
}

uasort($dealStatsArray, 'sortbyRevenueY');

しかし、これは正しく機能しません。すべてのrevenueY == 0配列を取り、配列の先頭に追加しますが、残りの配列はソートされません(最高から最低、最初のuasort())

これが私の最終的な目標です。すべてのrevenueY==0が配列の先頭にあり、その後に最高の収益が続き、配列の最後で最低の収益に下がる配列を作成することです。

4

2 に答える 2

0

uasort()これは、カスタムコールバックと;を使用して配列を「ソート」することでおそらく達成できます。

http://www.php.net/manual/en/function.uasort.php

function sortbyRevenueY($a, $b) {
    if ($a['revenueY'] == $b['revenueY']) {
       return 0;
    }

    if (0 == $a['revenueY']) {
       return -1;
    }

    if (0 == $b['revenueY']) {
       return 1;
    }

    return (($a["revenueY"]) > ($b["revenueY"])) ? -1 : 1;
}

uasort($dealStatsArray, 'sortbyRevenueY');

print_r($dealStatsArray);

テストできておらず、「callback」メソッドには微調整が必​​要な場合がありますがuasort()、配列を「どのように」ソートするかを決定するカスタムの「callback」メソッドを使用して配列をソートできます。配列内の値は、キーと値の関係を失うことなく並べ替えられます。

私の例は、これをどのように達成できるかを説明するためのものですが、前述のように、微調整が必​​要な場合があります。

[更新] 例によって更新し、「通常の」並べ替えと「0」による並べ替えを1つのコールバックに結合しようとしました。再びテストされていませんが、おそらくこの作業です。この更新された例をテストしてください。

于 2013-03-18T23:54:02.847 に答える
-1

シフトを解除する代わりに、配列をマージしてみることができます。

$dealStatsArray = array_merge($tmpArray, $dealStatsArray);

ですから、いくつのアイテム$tmpArrayがあったとしても、それらは最初になります

于 2013-03-18T23:41:05.717 に答える