根据条件合并多维数组
Merge multidimensional array according to conditions
我有以下数组:
array (size=6)
'ID' => int 786
'userID' => int 97291
'tip_index' => string 'CARS' (length=11)
'tip_apa' => string 'calda' (length=5)
'citire' => string '2' (length=1)
'data' => string '2020-04-21 15:32:49' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 785
'userID' => int 97291
'tip_index' => string 'TRUCKS' (length=9)
'tip_apa' => string 'calda' (length=5)
'citire' => string '1' (length=1)
'data' => string '2020-04-21 15:32:49' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 784
'userID' => int 97291
'tip_index' => string 'MOTORCYCLES' (length=4)
'tip_apa' => string 'calda' (length=5)
'citire' => string '1' (length=1)
'data' => string '2020-04-21 15:32:49' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 783
'userID' => int 97291
'tip_index' => string 'CARS' (length=11)
'tip_apa' => string 'calda' (length=5)
'citire' => string '1' (length=1)
'data' => string '2020-03-21 15:32:44' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 782
'userID' => int 97291
'tip_index' => string 'TRUCKS' (length=9)
'tip_apa' => string 'calda' (length=5)
'citire' => string '0' (length=1)
'data' => string '2020-03-21 15:32:41' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 781
'userID' => int 97291
'tip_index' => string 'MOTORCYCLES' (length=4)
'tip_apa' => string 'calda' (length=5)
'citire' => string '0' (length=1)
'data' => string '2020-03-21 15:32:39' (length=19)
我希望输出 3 个像这样的多维数组,按 tip_index
和 tip_apa
分组,其中我为每个 tip_apa
添加一些自定义键(例如:对于 tip_apa = rece
我想要添加数组 data_iv_rece
、number_iv_rece
、data_in_rece
、number_in_rece
)。每个 tip_apa
都有上个月的日期和值以及本月的日期和值,如下所示:
array (size=3)
'CARS' =>
array (size=2)
'rece' =>
array (size=4)
'data_iv_rece' => string '22.03.2020' (length=10)
'number_iv_rece' => string '1' (length=1)
'data_in_rece' => string '22.04.2020' (length=10)
'number_in_rece' => string '0' (length=1)
'calda' =>
array (size=4)
'data_iv_calda' => string '22.03.2020' (length=10)
'number_iv_calda' => string '1' (length=1)
'data_in_calda' => string '22.04.2020' (length=10)
'number_in_calda' => string '0' (length=1)
'TRUCKS' =>
array (size=2)
'rece' =>
array (size=4)
'data_iv_rece' => string '22.03.2020' (length=10)
'number_iv_rece' => string '1' (length=1)
'data_in_rece' => string '22.04.2020' (length=10)
'number_in_rece' => string '0' (length=1)
'calda' =>
array (size=4)
'data_iv_calda' => string '22.03.2020' (length=10)
'number_iv_calda' => string '1' (length=1)
'data_in_calda' => string '22.04.2020' (length=10)
'number_in_calda' => string '0' (length=1)
'MOTORCYCLES' =>
array (size=2)
'rece' =>
array (size=4)
'data_iv_rece' => string '22.03.2020' (length=10)
'number_iv_rece' => string '1' (length=1)
'data_in_rece' => string '22.04.2020' (length=10)
'number_in_rece' => string '0' (length=1)
'calda' =>
array (size=4)
'data_iv_calda' => string '22.03.2020' (length=10)
'number_iv_calda' => string '1' (length=1)
'data_in_calda' => string '22.04.2020' (length=10)
'number_in_calda' => string '0' (length=1)
这是过去 2 天一直在尝试的操作,但没有得到任何预期的输出:
$userID = $_SESSION['ID'];
$info = $db->query("SELECT * FROM `indecsi` WHERE `userID` = '$userID'")->fetchAll();
$arrayInfos = array();
foreach ($info as $key => $val)
{
$month= date('m',strtotime($val['data']));
if(date($month < date('m')) && $val['tip_apa'] == 'rece')
{
$data_iv_rece = $val['data'];
$number_iv_rece = $val['citire'];
$arrayInfos += [ 'data_iv_rece' => $data_iv_rece ];
$arrayInfos += [ 'number_iv_rece' => $number_iv_rece ];
}
if(date($month == date('m')) && $val['tip_apa'] == 'rece')
{
$data_in_rece = $val['data'];
$number_in_rece = $val['citire'];
$arrayInfos += [ "data_in_rece" => $data_in_rece ];
$arrayInfos += [ "number_in_rece" => $number_in_rece ];
}
if(date($month < date('m')) && $val['tip_apa'] == 'calda')
{
$data_iv_calda = $val['data'];
$number_iv_calda = $val['citire'];
$arrayInfos += [ 'data_iv_calda' => $data_iv_calda ];
$arrayInfos += [ 'number_iv_calda' => $number_iv_calda ];
}
if(date($month == date('m')) && $val['tip_apa'] == 'calda')
{
$data_in_calda = $val['data'];
$number_in_calda = $val['citire'];
$arrayInfos += [ "data_in_calda" => $data_in_calda ];
$arrayInfos += [ "number_in_calda" => $number_in_calda ];
}
}
最后尝试在 table 中获取 3 个数组:
$consum_rece = $number_in_rece - $number_iv_rece;
$consum_calda = $number_in_calda - $number_iv_calda;
$table.= "<tr class='text-center'>";
$table.= "<td>" . str_replace('_', ' ' , $val['tip_index']) . "</td>";
$table.= "<td>" . $arrayInfos['data_in_rece'] . "</td>";
$table.= "<td>" . $arrayInfos['number_in_rece'] . "</td>";
$table.= "<td>" . $arrayInfos['data_iv_rece'] . "</td>";
$table.= "<td>" . $arrayInfos['number_iv_rece'] . "</td>";
$table.= "<td>" . $consum_rece . "</td>";
$table.= "<td>" . $arrayInfos['data_in_calda'] . "</td>";
$table.= "<td>" . $arrayInfos['number_in_calda'] . "</td>";
$table.= "<td>" . $arrayInfos['data_iv_calda'] . "</td>";
$table.= "<td>" . $arrayInfos['number_iv_calda'] . "</td>";
$table.= "<td>" . $consum_calda . "</td>";
$table.= "<td>-</td>";
$table.= "</tr>";
尝试了多种方法,例如 array_push
、array_merge
、array_diff
以获得预期的输出,但没有成功。我觉得我已经走到一半了,做不对。有什么建议吗?谢谢!
起初我对你的解释有点困惑,但我想我发现了预期会发生什么。
假设您已经有了这个 php 数组(从 MySQL 或其他地方收集):
$all_vehicles = array(
array(
'id' => 786,
'userID' => 9791,
'tip_index' => 'CARS',
'tip_apa' => 'calda',
'citire' => 2,
'data' => '2020-04-21 15:32:49'
),
array(
'id' => 785,
'userID' => 9791,
'tip_index' => 'TRUCKS',
'tip_apa' => 'calda',
'citire' => 1,
'data' => '2020-04-21 15:32:49'
),
array(
'id' => 784,
'userID' => 97291,
'tip_index' => 'MOTORCYCLES',
'tip_apa' => 'calda',
'citire' => 1,
'data' => '2020-04-21 15:32:49'
),
array(
'id' => 783,
'userID' => 97291,
'tip_index' => 'CARS',
'tip_apa' => 'calda',
'citire' => 1,
'data' => '2020-03-21 15:32:44'
),
array(
'id' => 782,
'userID' => 97291,
'tip_index' => 'TRUCKS',
'tip_apa' => 'calda',
'citire' => 0,
'data' => '2020-03-21 15:32:41'
),
array(
'id' => 781,
'userID' => 97291,
'tip_index' => 'MOTORCYCLES',
'tip_apa' => 'calda',
'citire' => 0,
'data' => '2020-03-21 15:32:39'
),
);
我的建议是遍历数组并更新所需的值。我已通过添加 "data_in_" - Value.
自动删除 ifs 和 elses
然后将它们添加到多维数组以在汽车、卡车和摩托车之间进行拆分。
$ordered_vehicles = array();
foreach($all_vehicles as $val)
{
$month= date('m',strtotime($val['data']));
if($month <= date('m') && in_array($val['tip_apa'],array('rece','calda')))
{
$data = date('d.m.Y',strtotime($val['data']));
// Convert the data in the required format DD.MM.YYYY
$number = $val['citire'];
$val['data_in_'.$val['tip_apa']] = $data;
$val['number_in_'.$val['tip_apa']] = $number;
}
$ordered_vehicles[$val['tip_index']][$val['tip_apa']][] = $val;
}
预期结果将是包含 3 个子数组的多维数组 - 汽车、卡车和摩托车。他们每个人都有多个包含所需数据的数组。
我的情况是这样的:
Array
(
[CARS] => Array
(
[calda] => Array
(
[0] => Array
(
[id] => 786
[userID] => 9791
[tip_index] => CARS
[tip_apa] => calda
[citire] => 2
[data] => 2020-04-21 15:32:49
[data_in_calda] => 21.04.2020
[number_in_calda] => 2
)
[1] => Array
(
[id] => 783
[userID] => 97291
[tip_index] => CARS
[tip_apa] => calda
[citire] => 1
[data] => 2020-03-21 15:32:44
[data_in_calda] => 21.03.2020
[number_in_calda] => 1
)
)
)
[TRUCKS] => Array
(
[calda] => Array
(
[0] => Array
(
[id] => 785
[userID] => 9791
[tip_index] => TRUCKS
[tip_apa] => calda
[citire] => 1
[data] => 2020-04-21 15:32:49
[data_in_calda] => 21.04.2020
[number_in_calda] => 1
)
[1] => Array
(
[id] => 782
[userID] => 97291
[tip_index] => TRUCKS
[tip_apa] => calda
[citire] => 0
[data] => 2020-03-21 15:32:41
[data_in_calda] => 21.03.2020
[number_in_calda] => 0
)
)
)
[MOTORCYCLES] => Array
(
[calda] => Array
(
[0] => Array
(
[id] => 784
[userID] => 97291
[tip_index] => MOTORCYCLES
[tip_apa] => calda
[citire] => 1
[data] => 2020-04-21 15:32:49
[data_in_calda] => 21.04.2020
[number_in_calda] => 1
)
[1] => Array
(
[id] => 781
[userID] => 97291
[tip_index] => MOTORCYCLES
[tip_apa] => calda
[citire] => 0
[data] => 2020-03-21 15:32:39
[data_in_calda] => 21.03.2020
[number_in_calda] => 0
)
)
)
)
之后您可以根据需要打印和更改数据。
如果我在此过程中遗漏了什么,请在下面提及。干杯。
我有以下数组:
array (size=6)
'ID' => int 786
'userID' => int 97291
'tip_index' => string 'CARS' (length=11)
'tip_apa' => string 'calda' (length=5)
'citire' => string '2' (length=1)
'data' => string '2020-04-21 15:32:49' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 785
'userID' => int 97291
'tip_index' => string 'TRUCKS' (length=9)
'tip_apa' => string 'calda' (length=5)
'citire' => string '1' (length=1)
'data' => string '2020-04-21 15:32:49' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 784
'userID' => int 97291
'tip_index' => string 'MOTORCYCLES' (length=4)
'tip_apa' => string 'calda' (length=5)
'citire' => string '1' (length=1)
'data' => string '2020-04-21 15:32:49' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 783
'userID' => int 97291
'tip_index' => string 'CARS' (length=11)
'tip_apa' => string 'calda' (length=5)
'citire' => string '1' (length=1)
'data' => string '2020-03-21 15:32:44' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 782
'userID' => int 97291
'tip_index' => string 'TRUCKS' (length=9)
'tip_apa' => string 'calda' (length=5)
'citire' => string '0' (length=1)
'data' => string '2020-03-21 15:32:41' (length=19)
C:\wamp64\www\test2.php:19:
array (size=6)
'ID' => int 781
'userID' => int 97291
'tip_index' => string 'MOTORCYCLES' (length=4)
'tip_apa' => string 'calda' (length=5)
'citire' => string '0' (length=1)
'data' => string '2020-03-21 15:32:39' (length=19)
我希望输出 3 个像这样的多维数组,按 tip_index
和 tip_apa
分组,其中我为每个 tip_apa
添加一些自定义键(例如:对于 tip_apa = rece
我想要添加数组 data_iv_rece
、number_iv_rece
、data_in_rece
、number_in_rece
)。每个 tip_apa
都有上个月的日期和值以及本月的日期和值,如下所示:
array (size=3)
'CARS' =>
array (size=2)
'rece' =>
array (size=4)
'data_iv_rece' => string '22.03.2020' (length=10)
'number_iv_rece' => string '1' (length=1)
'data_in_rece' => string '22.04.2020' (length=10)
'number_in_rece' => string '0' (length=1)
'calda' =>
array (size=4)
'data_iv_calda' => string '22.03.2020' (length=10)
'number_iv_calda' => string '1' (length=1)
'data_in_calda' => string '22.04.2020' (length=10)
'number_in_calda' => string '0' (length=1)
'TRUCKS' =>
array (size=2)
'rece' =>
array (size=4)
'data_iv_rece' => string '22.03.2020' (length=10)
'number_iv_rece' => string '1' (length=1)
'data_in_rece' => string '22.04.2020' (length=10)
'number_in_rece' => string '0' (length=1)
'calda' =>
array (size=4)
'data_iv_calda' => string '22.03.2020' (length=10)
'number_iv_calda' => string '1' (length=1)
'data_in_calda' => string '22.04.2020' (length=10)
'number_in_calda' => string '0' (length=1)
'MOTORCYCLES' =>
array (size=2)
'rece' =>
array (size=4)
'data_iv_rece' => string '22.03.2020' (length=10)
'number_iv_rece' => string '1' (length=1)
'data_in_rece' => string '22.04.2020' (length=10)
'number_in_rece' => string '0' (length=1)
'calda' =>
array (size=4)
'data_iv_calda' => string '22.03.2020' (length=10)
'number_iv_calda' => string '1' (length=1)
'data_in_calda' => string '22.04.2020' (length=10)
'number_in_calda' => string '0' (length=1)
这是过去 2 天一直在尝试的操作,但没有得到任何预期的输出:
$userID = $_SESSION['ID'];
$info = $db->query("SELECT * FROM `indecsi` WHERE `userID` = '$userID'")->fetchAll();
$arrayInfos = array();
foreach ($info as $key => $val)
{
$month= date('m',strtotime($val['data']));
if(date($month < date('m')) && $val['tip_apa'] == 'rece')
{
$data_iv_rece = $val['data'];
$number_iv_rece = $val['citire'];
$arrayInfos += [ 'data_iv_rece' => $data_iv_rece ];
$arrayInfos += [ 'number_iv_rece' => $number_iv_rece ];
}
if(date($month == date('m')) && $val['tip_apa'] == 'rece')
{
$data_in_rece = $val['data'];
$number_in_rece = $val['citire'];
$arrayInfos += [ "data_in_rece" => $data_in_rece ];
$arrayInfos += [ "number_in_rece" => $number_in_rece ];
}
if(date($month < date('m')) && $val['tip_apa'] == 'calda')
{
$data_iv_calda = $val['data'];
$number_iv_calda = $val['citire'];
$arrayInfos += [ 'data_iv_calda' => $data_iv_calda ];
$arrayInfos += [ 'number_iv_calda' => $number_iv_calda ];
}
if(date($month == date('m')) && $val['tip_apa'] == 'calda')
{
$data_in_calda = $val['data'];
$number_in_calda = $val['citire'];
$arrayInfos += [ "data_in_calda" => $data_in_calda ];
$arrayInfos += [ "number_in_calda" => $number_in_calda ];
}
}
最后尝试在 table 中获取 3 个数组:
$consum_rece = $number_in_rece - $number_iv_rece;
$consum_calda = $number_in_calda - $number_iv_calda;
$table.= "<tr class='text-center'>";
$table.= "<td>" . str_replace('_', ' ' , $val['tip_index']) . "</td>";
$table.= "<td>" . $arrayInfos['data_in_rece'] . "</td>";
$table.= "<td>" . $arrayInfos['number_in_rece'] . "</td>";
$table.= "<td>" . $arrayInfos['data_iv_rece'] . "</td>";
$table.= "<td>" . $arrayInfos['number_iv_rece'] . "</td>";
$table.= "<td>" . $consum_rece . "</td>";
$table.= "<td>" . $arrayInfos['data_in_calda'] . "</td>";
$table.= "<td>" . $arrayInfos['number_in_calda'] . "</td>";
$table.= "<td>" . $arrayInfos['data_iv_calda'] . "</td>";
$table.= "<td>" . $arrayInfos['number_iv_calda'] . "</td>";
$table.= "<td>" . $consum_calda . "</td>";
$table.= "<td>-</td>";
$table.= "</tr>";
尝试了多种方法,例如 array_push
、array_merge
、array_diff
以获得预期的输出,但没有成功。我觉得我已经走到一半了,做不对。有什么建议吗?谢谢!
起初我对你的解释有点困惑,但我想我发现了预期会发生什么。
假设您已经有了这个 php 数组(从 MySQL 或其他地方收集):
$all_vehicles = array(
array(
'id' => 786,
'userID' => 9791,
'tip_index' => 'CARS',
'tip_apa' => 'calda',
'citire' => 2,
'data' => '2020-04-21 15:32:49'
),
array(
'id' => 785,
'userID' => 9791,
'tip_index' => 'TRUCKS',
'tip_apa' => 'calda',
'citire' => 1,
'data' => '2020-04-21 15:32:49'
),
array(
'id' => 784,
'userID' => 97291,
'tip_index' => 'MOTORCYCLES',
'tip_apa' => 'calda',
'citire' => 1,
'data' => '2020-04-21 15:32:49'
),
array(
'id' => 783,
'userID' => 97291,
'tip_index' => 'CARS',
'tip_apa' => 'calda',
'citire' => 1,
'data' => '2020-03-21 15:32:44'
),
array(
'id' => 782,
'userID' => 97291,
'tip_index' => 'TRUCKS',
'tip_apa' => 'calda',
'citire' => 0,
'data' => '2020-03-21 15:32:41'
),
array(
'id' => 781,
'userID' => 97291,
'tip_index' => 'MOTORCYCLES',
'tip_apa' => 'calda',
'citire' => 0,
'data' => '2020-03-21 15:32:39'
),
);
我的建议是遍历数组并更新所需的值。我已通过添加 "data_in_" - Value.
自动删除 ifs 和 elses然后将它们添加到多维数组以在汽车、卡车和摩托车之间进行拆分。
$ordered_vehicles = array();
foreach($all_vehicles as $val)
{
$month= date('m',strtotime($val['data']));
if($month <= date('m') && in_array($val['tip_apa'],array('rece','calda')))
{
$data = date('d.m.Y',strtotime($val['data']));
// Convert the data in the required format DD.MM.YYYY
$number = $val['citire'];
$val['data_in_'.$val['tip_apa']] = $data;
$val['number_in_'.$val['tip_apa']] = $number;
}
$ordered_vehicles[$val['tip_index']][$val['tip_apa']][] = $val;
}
预期结果将是包含 3 个子数组的多维数组 - 汽车、卡车和摩托车。他们每个人都有多个包含所需数据的数组。
我的情况是这样的:
Array
(
[CARS] => Array
(
[calda] => Array
(
[0] => Array
(
[id] => 786
[userID] => 9791
[tip_index] => CARS
[tip_apa] => calda
[citire] => 2
[data] => 2020-04-21 15:32:49
[data_in_calda] => 21.04.2020
[number_in_calda] => 2
)
[1] => Array
(
[id] => 783
[userID] => 97291
[tip_index] => CARS
[tip_apa] => calda
[citire] => 1
[data] => 2020-03-21 15:32:44
[data_in_calda] => 21.03.2020
[number_in_calda] => 1
)
)
)
[TRUCKS] => Array
(
[calda] => Array
(
[0] => Array
(
[id] => 785
[userID] => 9791
[tip_index] => TRUCKS
[tip_apa] => calda
[citire] => 1
[data] => 2020-04-21 15:32:49
[data_in_calda] => 21.04.2020
[number_in_calda] => 1
)
[1] => Array
(
[id] => 782
[userID] => 97291
[tip_index] => TRUCKS
[tip_apa] => calda
[citire] => 0
[data] => 2020-03-21 15:32:41
[data_in_calda] => 21.03.2020
[number_in_calda] => 0
)
)
)
[MOTORCYCLES] => Array
(
[calda] => Array
(
[0] => Array
(
[id] => 784
[userID] => 97291
[tip_index] => MOTORCYCLES
[tip_apa] => calda
[citire] => 1
[data] => 2020-04-21 15:32:49
[data_in_calda] => 21.04.2020
[number_in_calda] => 1
)
[1] => Array
(
[id] => 781
[userID] => 97291
[tip_index] => MOTORCYCLES
[tip_apa] => calda
[citire] => 0
[data] => 2020-03-21 15:32:39
[data_in_calda] => 21.03.2020
[number_in_calda] => 0
)
)
)
)
之后您可以根据需要打印和更改数据。 如果我在此过程中遗漏了什么,请在下面提及。干杯。