私は次のような単純な配列を持っています:
array (size=6)
0 =>
array (size=2)
'id' => int 1
'primary' => boolean false
1 =>
array (size=2)
'id' => int 2
'primary' => boolean false
2 =>
array (size=2)
'id' => int 3
'primary' => boolean false
3 =>
array (size=2)
'id' => int 4
'primary' => boolean true
4 =>
array (size=2)
'id' => int 5
'primary' => boolean false
5 =>
array (size=2)
'id' => int 6
'primary' => boolean false
配列が生成されるとき、それは常にid
上記のようにによって順序付けられます。私がやりたいのは、最初の要素となる配列要素をプロモートすることですusort()
。である要素は常に1つだけです。primary
TRUE
primary
TRUE
次に、以下で使用する簡単な比較関数を作成しましたusort()
。
$data = array(
array('id' => 1, 'primary' => FALSE),
array('id' => 2, 'primary' => FALSE),
array('id' => 3, 'primary' => FALSE),
array('id' => 4, 'primary' => TRUE),
array('id' => 5, 'primary' => FALSE),
array('id' => 6, 'primary' => FALSE),
);
function sortArray($a, $b){
if($a['primary']){
return -1;
}elseif($b['primary']){
return 1;
}else{
return 0;
}
}
var_dump($data);
usort($data, 'sortArray');
var_dump($data);
withの要素primary = TRUE
が前面にプロモートされますが、残りの要素は逆の順序で並べ替えられ、withの要素は適切でid = 5
はありません。
array (size=6)
0 =>
array (size=2)
'id' => int 4
'primary' => boolean true
1 =>
array (size=2)
'id' => int 5
'primary' => boolean false
2 =>
array (size=2)
'id' => int 6
'primary' => boolean false
3 =>
array (size=2)
'id' => int 3
'primary' => boolean false
4 =>
array (size=2)
'id' => int 2
'primary' => boolean false
5 =>
array (size=2)
'id' => int 1
'primary' => boolean false
両方の要素のprimary
プロパティがfalseの場合、IDを比較できることはわかっています。
function sortArray($a, $b){
if($a['primary']){
return -1;
}elseif($b['primary']){
return 1;
}else{
return $a['id'] > $b['id'];
}
}
しかし、なぜusort
他の要素の順序をランダム化するのですか?usort()
要素をプロモートし、配列の残りの部分をそのままにしておくために使用することは可能ですか?