【发布时间】:2020-01-07 16:41:32
【问题描述】:
我有一个 image_ID 数组,其中一些会重复出现。我想将这些与彩色行分组(我使用粗体只是为了查看效果)。我不能使用奇数/偶数,因为 image_id 可能在偶数旁边。这是一个示例数组;
数组 (1 => 9681 2 => 9681 [3] => 9681 [4] => 8351 [5] => 8351 [6] => 8351 [7] => 2320 [8] => 2320 [9] => 2320 [10] => 2320 [11] => 2320 [12] => 20711 [13] => 20711 [14] => 20711 [15] => 20711 [16] => 5223 [17] => 5223 [18] => 5223 [19] => 5223 [20] => 5223 )
我们的想法是 9681s 将是一种颜色,然后 8351s 将是另一种颜色,然后 2320s 可以重新启动与 9681s 相同的颜色。创建每个图像的可见分组(基于 image_ID)。 Image _ID 是唯一可用于对图像进行分组的东西。
所以问题的症结在于如何将事物分组到列表或数组中(如果我必须在它们之间进行转换,我可以)并将交替格式应用于每个组。如果该交替格式是适合我的二进制格式,那么上面将是“11100011111000011111”,因为我可以在循环中使用它来应用带有一些样式的 if...else 循环。
我试过了 如果 ($image_id & 2) { ...应用粗体 } 别的 { ...不要粗体 }
//感谢@kainaw,这是我最终使用的代码
// Create a binary pattern to match occurrence of image_id for visually grouping later
// Create a new array to count the values then make the count the keys
$output_result_array['bin_group'] = array_flip(array_count_values($output_result_array['source']));
// Setup temp variables
$c = false;
$l = null;
// Loop though the counted and flipped array creating a binary representation of groups.
foreach($output_result_array['source'] as $k=>$v) {
if($v != $l) $c = !$c;
$output_result_array['bin_group'][$k] = $c;
$l = $v;
}
// START add different row colouring based on Image_id groups represented in BIN
if ($output_result_array['bin_group'][$x]) {
$output_result .= '<tr class="post bg2;">';
} else {
$output_result .= '<tr>';
}
// END add different row colouring
【问题讨论】:
-
根据您的描述,您不能使用 2 种颜色。我将使用字母来使这更简单。假设我有ABCA。 A是一种颜色。 B是另一个。 C 回到 A 的颜色。然后,我又A了。我不能使用 A 的颜色,除非您可以保证 A 以后不会出现,例如在执行此操作之前对列表进行排序。
-
如果你的数组ID是有序的,所有的9681在一起,只要检测ID的变化,改变你的高亮状态。
-
@kainaw - 如果我有 AABCCCAAA = 我想要 = RED:RED:BLUE:RED:RED:RED:BLUE:BLUE:BLUE 如果另一个 A 出现也没关系,我的想法是仅在组之间进行视觉分组。
-
@Dave - 在 PHP 中我可以检测到更改,但不能检测到组。我对 kainaw 的回复可能会有所帮助。这个问题让我很头疼,它简单而复杂。我非常感谢任何人的帮助。
-
添加了页面外观的屏幕截图。这个想法是地图是红色的,然后抬头看管!是蓝色然后一般视图我再次红色。 photos.app.goo.gl/Fw7CnRkHYjhuRY4v9