- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在使用 FLOT 和 php 制作一些统计图表的快速原型(prototype),我实际上是在拼凑一些东西来展示一些东西。
但是我遇到了一个让我发疯的问题......
所以我有一些从数据库中获取的数据,然后为了使它更容易用于我的 Flot hack,我将其转换为如下所示:
[ [0,1], [2,1] , [4,1] , [4,1] , [5,1] ,[9 , 1] , [9, 1] , [10,1 ] , [12,1], [13,1] ]
现在的最终计划是有几组数据,然后制作一个堆叠图。所以我需要做的是像上面那样找出重复的地方:
[.....[4,1],[4,1] .....]
需要看起来像这样:
[.....[4,1],[4,2,1].....]
下面是我尝试对其进行排序的尝试(这是我尝试向前、向后更改内部值和外部值的最新尝试迭代)...
$count = count($array);
$sorted = false;
while (!$sorted)
{
$doneSomething = 0;
for($i = $count - 1; $i > 0; $i--)
{
$tempArr = $array[$i];
foreach($array as $key => $a)
{
if($key == $i)
{
echo "breaking";
continue;
}
$result = array_diff($tempArr,$a);
if(count($result) == 0 )
{
$array[$i][1]++;
if(count($array[$i]) == 3)
$array[$i][2]++;
else
$array[$i][] = 1;
$doneSomething++;
}
if($doneSomething > 0)
break;
}
}
if($doneSomething == 0)
$sorted=true;
}
结果是这样的:
Array
(
[0] => Array
(
[0] => 0
[1] => 1
)
[1] => Array
(
[0] => 2
[1] => 4
[2] => 3
)
[2] => Array
(
[0] => 4
[1] => 2
[2] => 1
)
[3] => Array
(
[0] => 4
[1] => 5
[2] => 4
)
[4] => Array
(
[0] => 5
[1] => 1
)
[5] => Array
(
[0] => 9
[1] => 2
[2] => 1
)
[6] => Array
(
[0] => 9
[1] => 3
[2] => 2
)
[7] => Array
(
[0] => 10
[1] => 1
)
[8] => Array
(
[0] => 12
[1] => 1
)
[9] => Array
(
[0] => 13
[1] => 1
)
)
如您所见,这并不是我想要的结果:
[ [0,1], [2,1] , [4,1] , [4,2,1] , [5,1] ,[9,1] , [9,2,1] , [10,1] , [12,1], [13,1] ]
如果有人能帮我解决这个问题,我将不胜感激。
谢谢
瓦德
编辑:我应该注意,如果只有 2 个重复,我可以解决这个问题,但是当有 3 个或更多时,即:
[....[4,1],[4,1],[4,1],[4,1]...]
需要看起来像:
[....[4,1],[4,2,1],[4,3,2],[4,4,3]...]
最佳答案
试试这个。这似乎在这里工作正常:
<?php
$array = array( array(0,1), array(2,1) , array(4,1) ,
array(4,1) , array(5,1) ,array(9 , 1) ,
array(9, 1) , array(10,1) , array(12,1), array(13,1) );
$last_elem = null;
foreach($array as &$elem){
if($last_elem){
if($elem[0] == $last_elem[0]){
$elem[2] = (isset($last_elem[2]) ? $last_elem[2] + 1 : 1);
$elem[1] = $last_elem[1] + 1;
}
}
$last_elem = &$elem;
}
var_dump($array);
?>
这在这里工作得很好,我已经用这个数组测试过它:[ [0,1], [2,1], [4,1], [4,1], [4,1], [4,1], [5,1], [9,1 ], [9,1] ,[9,1] ,[10,1] ,[12,1], [13,1] ];
输出是:
array
0 =>
array
0 => int 0
1 => int 1
1 =>
array
0 => int 2
1 => int 1
2 =>
array
0 => int 4
1 => int 1
3 =>
array
0 => int 4
1 => int 2
2 => int 1
4 =>
array
0 => int 4
1 => int 3
2 => int 2
5 =>
array
0 => int 4
1 => int 4
2 => int 3
6 =>
array
0 => int 5
1 => int 1
7 =>
array
0 => int 9
1 => int 1
8 =>
array
0 => int 9
1 => int 2
2 => int 1
9 =>
array
0 => int 9
1 => int 3
2 => int 2
10 =>
array
0 => int 10
1 => int 1
11 =>
array
0 => int 12
1 => int 1
12 => &
array
0 => int 13
1 => int 1
关于php - 尝试使用 php 对数组数组进行排序。拔头发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7429904/
我是一名优秀的程序员,十分优秀!