我有一个带有多个rgb颜色代码的数组:
Array (
[0] => Array
(
[0] => 255
[1] => 0
[2] => 0
)
[1] => Array
(
[0] => 125
[1] => 20
[2] => 255
)
[2] => Array
(
[0] => 100
[1] => 255
[2] => 0
)
[0]为红色[1]为绿色,[2]为蓝色
我以前用array_multisort($r,SORT_DESC,$g,SORT_DESC,$b,SORT_DESC,$array_rgb_colors);
对这个数组进行了排序
我想通过颜色优势对这个数组进行排序:所有红色优先,然后是绿色,然后是蓝色。在我的例子中,我将:
Array (
[0] => Array
(
[0] => 255
[1] => 0
[2] => 0
)
[2] => Array
(
[0] => 100
[1] => 255
[2] => 0
)
[1] => Array
(
[0] => 125
[1] => 20
[2] => 255
)
我想我需要usort
,但可能是什么功能?
答案 0 :(得分:1)
public function main() {
$colors = [
0 => [
0 => 255,
1 => 0,
2 => 0
],
1 => [
0 => 125,
1 => 20,
2 => 255
],
2 => [
0 => 100,
1 => 255,
2 => 0
]
];
$sortedColors = $this->sortByColor($colors);
print_r($sortedColors);
}
public function sortByColor($colors) {
$reds = [];
$greens = [];
$blues = [];
$otherColors = [];
$sortedArray = [];
foreach($colors as $color) {
if($color[0] > $color[1] && $color[0] > $color[2]) {
$reds[] = $color;
}
elseif($color[1] > $color[0] && $color[1] > $color[2]) {
$greens[] = $color;
}
elseif($color[2] > $color[0] && $color[2] > $color[1]) {
$blues[] = $color;
}
else {
$otherColors[] =$color;
}
}
$sortedArray = array_merge($sortedArray, $reds);
$sortedArray = array_merge($sortedArray, $greens);
$sortedArray = array_merge($sortedArray, $blues);
$sortedArray = array_merge($sortedArray, $otherColors);
return $sortedArray;
}
这将对您的阵列进行排序,并根据三种颜色中最大的数量放置所有颜色,然后是红色,然后是绿色,然后是蓝色。我想这就是你想要的。
这里的问题是如果所有数字都相同,它们将被抛入othercolors数组。在这种情况下,你从未说过你想要发生什么。
答案 1 :(得分:0)
使用uasort并逐步比较.. 尝试以下 -
function my_sort($a,$b)
{
if($a==$b) return 0;
if ($a[0]==$b[0])
{
if($a[1]==$b[1])
{
return ($a[2]<$b[2])?-1:1; //return comparing blue
}
return ($a[1]<$b[1])?-1:1; //return comparing green
}
return ($a[0]<$b[0])?-1:1; //return comparing red
}
uasort($arr,"my_sort"); // call your array here
print_r($arr);
答案 2 :(得分:0)
这是我从您的问题中理解的示例代码
请注意,这只是一个示例,您可以尝试使用其他方法来获得更优化的代码
$array = array(
array('0' => '255','1' => '0','2' => '0'),
array('0' => '125','1' => '20','2' => '255'),
array('0' => '100','1' => '255','2' => '0'),
array('0' => '125','1' => '20','2' => '255'),
);
$colorArray = array('r'=>array('0' => '255','1' => '0','2' => '0'),
'g'=>array('0' => '100','1' => '255','2' => '0'),
'b'=>array('0' => '125','1' => '20','2' => '255'),
);
$finalColor = array();
foreach ($array as $key => $value) {
if($value == $colorArray['r']){
$finalColor[$key] = $value;
}
}
foreach ($array as $key => $value) {
if($value == $colorArray['g']){
$finalColor[$key] = $value;
}
}
foreach ($array as $key => $value) {
if($value == $colorArray['b']){
$finalColor[$key] = $value;
}
}
echo '<pre>';print_r($finalColor);