如何基于第一个值php合并子数组

时间:2015-02-23 23:57:56

标签: php arrays multidimensional-array array-multisort

我有一个放在一起的数组。它基本上是7个站点的24个数据点。每个站每小时都有一个数据点,并为每个数据点创建一个新的子数组。这个问题,我现在想要根据电台分割数据,这样我就可以对它进行排序。当我这样做时,array_filter对我不起作用。我想基本上将每个子数组中具有相同行0结果的所有值组合在一起。但请保留每个数据点。第0行是电台名称。这是一个数组外观的例子。有160个子阵列。我需要做的就是根据Station名称将它们组合在一起。我打算基于Array值来做这个,但问题是如果缺少数据点,它会打破这个逻辑。

Array
 (
   [0] => Array
    (
       [0] => STATIONONE
       [1] => 02/22/15 04:00:00 PM
       [2] => SW
       [3] => Array
            (
                [0] => 4.51
            )

        [4] => MPH
        [5] => Array
            (
                [0] => 16.1
            )

        [6] => MPH
    )

     [1] => Array
    (
        [0] => STATIONONE
        [1] => 02/22/15 05:00:00 PM
        [2] => S
        [3] => Array
            (
                [0] => 2.7
            )

        [4] => MPH
        [5] => Array
            (
                [0] => 9.61
            )

        [6] => MPH
    )

它一直在重复,直到我有23个值。然后是下一站。

所以0-22子阵列值=站1 23-45子阵列值=第2站

等......只是说明要帮我展示我想要做的事情。

2 个答案:

答案 0 :(得分:0)

您对输出的期望并不完全清楚,但这可能会让您:

$entriesByStation = []
foreach ($entries as $entry) {
  $entriesByStation[$entry[0]] = $entry;
} 

这将按$entriesByStation数组

中的电台名称对所有条目进行分组

答案 1 :(得分:0)

接受的答案让我接近搞清楚了。我不得不乘车站这样做。所以我只创建了7个foreach语句并为每个站创建了一个数组。这样我也可以根据需要将数组合并在一起。

# Parse our All Data and set station
foreach ($array as $entry) {
   if ($entry[0] === "STATIONONE"){
  $S1pkwsite = ($entry[0]);
  $S1pkwvalue = ($entry[5][0]);
  $S1pkwdate = ($entry[1]);
  $S1pkwunit = ($entry[6]);
  $S1wspvalue = ($entry[3][0]);
  $S1wspunit = ($entry[4]);
  $S1wdrvalue = ($entry[2]);
  $S1pkwdataarray[] = array('SiteName'=>$S1pkwsite,'DATE'=>$S1pkwdate,'WDR'=>$S1wdrvalue,'VALUE'=>$S1pkwvalue,'UNIT'=>$S1pkwunit);
  }
  }


array_push ($Stationone_data, $pkwdataarray);

$Stationone_data = array_shift($Stationone_data);