gpt4 book ai didi

php - 尝试使用 php 对数组数组进行排序。拔头发?

转载 作者:可可西里 更新时间:2023-10-31 23:34:08 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com