指定的列值的2D数组的组排序行 我需要根据特定键的共享值对2D数组的行进行分组。具体来说,我想根据每个子阵列中的索引2按值分组。 这是我目前使用的代码...

问题描述 投票:0回答:3

电流输出(分类但未分组):

Array ( [3] => Array ( [0] => 2, [1] => "sdfsdgdfgdfgdfg", [2] => 3, [3] => "2013-05-30 13:53:23" ) [2] => Array ( [0] => 1, [1] => "This must also be done", [2] => 4, [3] => "2013-03-28 12:13:34" ) [1] => Array ( [0] => 1, [1] => "testing this show me 2", [2] => 5, [3] => "2029-02-23 17:27:20" ) [0] => Array ( [0] => 1, [1] => "Do this task and make sure it gets done", [2] => 5, [3] => "2013-06-28 12:12:41" ) )

theSiled的输出(由键[2]分组):
Array
(
    [3] => Array (
        [0] => Array ( [0] => 2, [1] => "sdfsdgdfgdfgdfg", [2] => 3, [3] => "2013-05-30 13:53:23" )
    )
    [4] => Array (
        [0] => Array ( [0] => 1, [1] => "This must also be done", [2] => 4, [3] => "2013-03-28 12:13:34" )
    )
    [5] => Array (
        [0] => Array ( [0] => 1, [1] => "testing this show me 2", [2] => 5, [3] => "2029-02-23 17:27:20" )
        [1] => Array ( [0] => 1, [1] => "Do this task and make sure it gets done", [2] => 5, [3] => "2013-06-28 12:12:41" )
    )
)

如何通过保持分类功能在KEY [2]上通过其共享值来修改代码?
    

$array_1 = array(); $array_2 = array(); foreach($test_array as $item) { if($item[0] == 1) { $array_1[] = $item; } elseif($item[0] == 2) { $array_2[] = $item; } } $final_array = array($array_1, $array_2);
必须有更优化的代码,但这应该满足您的需求。
    

php arrays sorting grouping multidimensional-array
3个回答
0
投票
array_multisort()
是您所追求的,它允许您通过子数组对主数组进行排序并维护键值链接

I使用以下来对一个相当大的多维数组排序,这些数组基于排序订单箭头/desc在具有许多列和可排序列的表上。 它的一团糟,但您应该能够跟随它。

if (strlen($_GET['col'])<1) { foreach ($dataarray as $key => $row) { $spend[$key] = $row[6]; } array_multisort($spend, SORT_DESC, $dataarray); } else if ($_GET['col']=="spend"){ foreach ($dataarray as $key => $row) { $spend[$key] = $row[3]; } if ($_GET['order']=="asc") { array_multisort($spend, SORT_ASC, $dataarray); } else { array_multisort($spend, SORT_DESC, $dataarray); } } else if ($_GET['col']=="name"){ foreach ($dataarray as $key => $row) { $name[$key] = $row[1]; } if ($_GET['order']=="asc") { array_multisort($name, SORT_ASC, $dataarray); } else { array_multisort($name, SORT_DESC, $dataarray); } } else if ($_GET['col']=="avg"){ foreach ($dataarray as $key => $row) { $avg[$key] = $row[4]; } if ($_GET['order']=="asc") { array_multisort($avg, SORT_ASC, $dataarray); } else { array_multisort($avg, SORT_DESC, $dataarray); } } else if ($_GET['col']=="sites"){ foreach ($dataarray as $key => $row) { $sites[$key] = $row[5]; } if ($_GET['order']=="asc") { array_multisort($sites, SORT_ASC, $dataarray); } else { array_multisort($sites, SORT_DESC, $dataarray); } } else if ($_GET['col']=="rate"){ foreach ($dataarray as $key => $row) { $rate[$key] = $row[6]; } if ($_GET['order']=="asc") { array_multisort($rate, SORT_ASC, $dataarray); } else { array_multisort($rate, SORT_DESC, $dataarray); } } else { foreach ($dataarray as $key => $row) { $spend[$key] = $row[2]; } array_multisort($spend, SORT_DESC, $dataarray); }

0
投票

thy比确定排序/分组列的条件的一个块,我总是建议查找阵列,然后是非常快速的调用。  我发现这种语法更简洁,更可读性,更易于维护。

因此,对分组的数据进行了正确的排序,请提前对数据进行排序(虽然仍然以其简单的形式)。

if-elseif-elseif-elseif...else

在宇宙飞船运营商(PHP7)中,将为您完成所有努力。 只需确保将
isset()
变量传递到具有

0
投票
的函数范围中。
    当您迭代输入数组,隔离识别列值(并根据需要进行准备),然后将其用作确定应存储数据的组的临时密钥。
  1. 最终,使用
    $groupsort
    删除临时识别密钥(如果需要)。
    代码:(
  2. demo
  3. use
    输出:
    $row
  4. 
    
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.