加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

尝试使用PHP排序数组数组..拉出头发?

发布时间:2020-12-13 16:13:21 所属栏目:PHP教程 来源:网络整理
导读:我正在使用FLOT和php做一些统计图的快速原型,我实际上是在一起黑客攻击以展示一些东西. 然而,我面临的问题是我的坚果…… 所以我有一些数据,我从数据库中抓取,然后为了让它很容易为我的Flot hack工作,我把它转换成如下所示: [[0,1],[2,[4,[5,[9,[10,[ 12,[1
我正在使用FLOT和php做一些统计图的快速原型,我实际上是在一起黑客攻击以展示一些东西.

然而,我面临的问题是我的坚果……

所以我有一些数据,我从数据库中抓取,然后为了让它很容易为我的Flot hack工作,我把它转换成如下所示:

[[0,1],[2,[4,[5,[9,[10,[ 12,[13,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,[12,1]]

如果有人可以帮我解决这个问题,我们将非常感激.

谢谢

瓦杰

编辑:我应该注意,如果只有2个重复,它不是那么糟糕我可以工作,但它有3或更多时,即:

[… [4,1] …]

需要看起来像:

[…. [4,3,2],4,3] …]

解决方法

试试吧.这似乎在这里工作正常:

<?php
    $array = array( array(0,1),array(2,array(4,array(5,array(9,array(10,array(12,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,[ 9,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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读