ここではちょっとした厄介な状況があります。私はPHPでオブジェクトの配列を持っているので、複数のプロパティでそれらをソートする必要があります。最終的な目標は、「中止」された項目が配列の最後にあるところでそれらをソートすることです。そして、配列全体がIDで行われます。したがって、1が中止されない限り、ID 1は2の前に来るでしょう。次に2が最初に来ます。ここでPHPでオブジェクトの配列を複数のプロパティで並べ替える
$prod = array(
1 => Product Object (
[id] => 1
[title] => "A product"
[is_discontinued] => 1
)
2 => Product Object (
[id] => 2
[title] => 'Another Product'
[is_discontinued] => 0
)
3 => Product Object (
[id] => 3
[title] => 'Yet another one'
[is_discontinued] => 0
)
...
)
私のオリジナルのアイデアは、PHPで「usort」機能に組み込まれて使用することでしたが、それはそれを作ったとして、IDが後方だったので、それがうまくいかなかった...私のデータの一例です。ここでは、..私がやった仕事をして2、その後、中止製品のすべては、配列の末尾に今あったが、今3が最初に表示されますので、それはIDの順序を逆に
$prod = usort($prod, function($a) {
return ($a->is_discontinued) ? 1 : -1;
});
です私はそれが2、次に3、そして1とリストされるようにそれが必要です。2は中断されていないIDの中で最も低いIDなので、非中断の最も低いIDです。
私は理解したいと思っています。必要に応じてもっと多くのコードを提供することができます。私は本当にこれを理解する必要があります。事前にお手伝いいただきありがとうございます、本当に感謝しています。
問題は、1つの単一の値に基づいてオブジェクトの配列をソートしていたので、私の質問は重複としてマークされていません。これは私がすでに試したソリューションを使用することで簡単にやり遂げることができますが、キーと別のキーでソートする必要があります。
それは厄介かもしれません、しかし、利用可能な/ディスコの配列を2つの別々のものに分割することができますntinued、[ksort()](https://secure.php.net/manual/en/function.ksort.php)それらを結合して戻します。これはあなたが最初に彼らの鍵で注文された後、彼らの鍵で注文されることを中止する必要があります。 – Jake
'array_filter()'を使って、 'is_discontinued'を' true'/'1'として削除して、残りのループが簡単になるようにすることができます。しかし、これは一時的に[type juggle](http://php.net/manual/en/language.types.type-juggling.php)オブジェクトを持っていることを意味します。 – Xorifelse
@ジェイク私はそれをしなければならないかもしれない。私はそれを分割しないようにしようとしていましたが、1つの配列に対して4つまたは5つのforeachループを持つのが嫌いです。私が試したことは、2つではなく1つのプロパティに基づいてソートすることしかできません。 –