0

こんにちは私は少し問題があり、答えを見つけることができないようです。配列を含む配列があり、これらのサブ配列をフィールドの同じ値に基づいてグループにグループ化したい。これは私のコードであり、値内の配列に基づいて配列を並べ替えることができます。共有値に基づいて結果をグループ化するにはどうすればよいですか?一部の値は日付に基づいているため、おそらくすべての値がわからないでしょう。たとえば、1日/月ごとにすべてをグループ化します。

if($filter == "ORDER BY TODO_REF DESC"){
$type_sort = 0;
};
if($filter == "ORDER BY TODO_PRIO DESC"){
$type_sort = 2;
};
if($filter == "ORDER BY TODO_DEAD DESC"){
$type_sort = 3;
};

function aasort (&$array, $key) {
$sorter=array();
$ret=array();
reset($array);
foreach ($array as $ii => $va) {
    $sorter[$ii]=$va[$key];
}
asort($sorter);
foreach ($sorter as $ii => $va) {
    $ret[$ii]=$array[$ii];
}
$array=$ret;
}

 aasort($test_array, $type_sort);
print_r($test_array);

現在の出力:

priority
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
    )

)

私が欲しいのはこのようなもので、サブ配列キー2に基づいて別々の配列に分割されます。

Array
(
[3] => Array
    (
        [0] => 2
        [1] => sdfsdgdfgdfgdfg
        [2] => 3
        [3] => 2013-05-30 13:53:23
    )

)
Array
(
[2] => Array
    (
        [0] => 1
        [1] => This must also be done
        [2] => 4
        [3] => 2013-03-28 12:13:34
    )

)
Array
(
[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
    )

)
4

3 に答える 3

0
$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);

より最適化されたコードが必要ですが、これはニーズに応えるはずです。

于 2013-03-05T10:47:57.067 に答える
0

array_multisort()プライマリ配列をサブ配列でソートし、キーと値のリンクを維持できるようになります

以下を使用して、多くの列と並べ替え可能な列を持つテーブルの並べ替え順序の矢印 asc/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);
            }
于 2013-03-05T10:49:23.060 に答える