すでにソートされている配列があります。
ここで、サブ配列値が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が配列の先頭にあり、その後に最高の収益が続き、配列の最後で最低の収益に下がる配列を作成することです。