如何根据第一个值 php 合并子数组
How to merge sub-arrays based on first value php
我有一个放在一起的数组。它基本上是 7 个站点的 24 个数据点。每个站每小时都有一个数据点,并为每个数据点创建一个新的子数组。这个问题是,我现在想根据站点拆分数据,以便对其进行排序。当我这样做时 array_filter 对我不起作用。我想基本上将所有具有相同行 0 的值组合到每个子数组中。但根据它们保留每个数据点。第 0 行是站名。这是数组外观的示例。有160个子阵列。我需要做的就是根据站名将它们组合在一起。我打算根据数组值来做这个,但问题是如果一个数据点丢失,它会破坏逻辑。
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
等..只是为了帮助展示我正在努力做的事情。
您并不完全清楚您期望的输出是什么,但这可能会让您到达那里:
$entriesByStation = []
foreach ($entries as $entry) {
$entriesByStation[$entry[0]] = $entry;
}
这将在 $entriesByStation
数组
中按站点名称对所有条目进行分组
接受的答案让我接近弄清楚这个问题。不过,我必须通过车站来做这件事。所以我只是创建了 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);
我有一个放在一起的数组。它基本上是 7 个站点的 24 个数据点。每个站每小时都有一个数据点,并为每个数据点创建一个新的子数组。这个问题是,我现在想根据站点拆分数据,以便对其进行排序。当我这样做时 array_filter 对我不起作用。我想基本上将所有具有相同行 0 的值组合到每个子数组中。但根据它们保留每个数据点。第 0 行是站名。这是数组外观的示例。有160个子阵列。我需要做的就是根据站名将它们组合在一起。我打算根据数组值来做这个,但问题是如果一个数据点丢失,它会破坏逻辑。
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
等..只是为了帮助展示我正在努力做的事情。
您并不完全清楚您期望的输出是什么,但这可能会让您到达那里:
$entriesByStation = []
foreach ($entries as $entry) {
$entriesByStation[$entry[0]] = $entry;
}
这将在 $entriesByStation
数组
接受的答案让我接近弄清楚这个问题。不过,我必须通过车站来做这件事。所以我只是创建了 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);