从PHP数组获取数据
我有一个数组,它的结构如下。有两个元素的日期/时间完全相同,不同的是方向和值从PHP数组获取数据,php,arrays,Php,Arrays,我有一个数组,它的结构如下。有两个元素的日期/时间完全相同,不同的是方向和值 Array ( [0] => Array ( [date] => 2014-12-09 [time] => 21:58:15 [value] => 4 [in_out] => Outgoing ) [1] => Array (
Array
(
[0] => Array
(
[date] => 2014-12-09
[time] => 21:58:15
[value] => 4
[in_out] => Outgoing
)
[1] => Array
(
[date] => 2014-12-09
[time] => 21:58:15
[value] => 5
[in_out] => Incoming
)
[2] => Array
(
[date] => 2014-12-09
[time] => 21:57:45
[value] => 5
[in_out] => Outgoing
)
[3] => Array
(
[date] => 2014-12-09
[time] => 21:57:45
[setup_name] => 5
[in_out] => Incoming
)
[4] => Array
(
[date] => 2014-12-09
[time] => 21:57:15
[setup_name] => 3
[in_out] => Incoming
)
[5] => Array
(
[date] => 2014-12-09
[time] => 21:57:15
[value] => 6
[in_out] => Outgoing
)
[6] => Array
(
[date] => 2014-12-09
[time] => 21:56:45
[value] => 6
[in_out] => Outgoing
)
[7] => Array
(
[date] => 2014-12-09
[time] => 21:56:45
[value] => 7
[in_out] => Incoming
)
[8] => Array
(
[date] => 2014-12-09
[time] => 21:56:15
[value] => 4
[in_out] => Outgoing
)
[9] => Array
(
[date] => 2014-12-09
[time] => 21:56:15
[value] => 5
[in_out] => Incoming
)
)
我需要将数据放入具有以下结构的新数组中:
Array
(
[0] => Array
(
[date] => 2014-12-09
[time] => 21:58:15
[out_value] => 4
[in_value] => 5
)
[1] => Array
(
[date] => 2014-12-09
[time] => 21:57:45
[out_value] => 5
[in_value] => 5
)
[2] => Array
(
[date] => 2014-12-09
[time] => 21:57:15
[out_value] => 6
[in_value] => 3
)
[3] => Array
(
[date] => 2014-12-09
[time] => 21:56:45
[out_value] => 6
[in_value] => 7
)
[4] => Array
(
[date] => 2014-12-09
[time] => 21:56:15
[out_value] => 4
[in_value] => 5
)
)
如果始终如一地交替传出/传入,这就足够简单了,但有时会同时有两个传入(3和4)
任何想法都将不胜感激
谢谢首先,请让我确保在一秒钟内,只有一个
传入
和一个传出
如果您的答案是肯定的,请尝试以下方法:
$input = array
(
'0' => array
(
'date' => '2014-12-09',
'time' => '21:58:15',
'value' => '4',
'in_out' => 'Outgoing'
),
'1' => array
(
'date' => '2014-12-09',
'time' => '21:58:15',
'value' => '5',
'in_out' => 'Incoming'
),
'2' => array
(
'date' => '2014-12-09',
'time' => '21:57:45',
'value' => '5',
'in_out' => 'Outgoing',
),
'3' => array
(
'date' => '2014-12-09',
'time' => '21:57:45',
'setup_name' => '5',
'in_out' => 'Incoming'
),
'4' => array
(
'date' => '2014-12-09',
'time' => '21:57:15',
'setup_name' => '3',
'in_out' => 'Incoming'
),
'5' => array
(
'date' => '2014-12-09',
'time' => '21:57:15',
'value' => '6',
'in_out' => 'Outgoing'
),
'6' => array
(
'date' => '2014-12-09',
'time' => '21:56:45',
'value' => '6',
'in_out' => 'Outgoing'
),
'7' => array
(
'date' => '2014-12-09',
'time' => '21:56:45',
'value' => '7',
'in_out' => 'Incoming'
),
'8' => array
(
'date' => '2014-12-09',
'time' => '21:56:15',
'value' => '4',
'in_out' => 'Outgoing'
),
'9' => array
(
'date' => '2014-12-09',
'time' => '21:56:15',
'value' => '5',
'in_out' => 'Incoming'
)
);
$temp = array();
$keys = array('Incoming' => 'in_value', 'Outgoing' => 'out_value');
foreach ($input as $line){
$temp[$line['date'].$line['time']]['date'] = $line['date'];
$temp[$line['date'].$line['time']]['time'] = $line['time'];
if(!empty($line['value'])){
$temp[$line['date'].$line['time']][$keys[$line['in_out']]] = $line['value'];
}elseif(!empty($line['setup_name'])){
$temp[$line['date'].$line['time']][$keys[$line['in_out']]] = $line['setup_name'];
}
}
$result = array_values($temp);
print_r($result);
以下是另一种方法:
$oldArrays = [
[ 'date' => '2014-12-09', 'time' => '21:58:15', 'value' => 4, 'in_out' => 'Outgoing' ],
[ 'date' => '2014-12-09', 'time' => '21:58:15', 'value' => 5, 'in_out' => 'Incoming' ],
[ 'date' => '2014-12-09', 'time' => '21:57:45', 'value' => 5, 'in_out' => 'Outgoing' ],
[ 'date' => '2014-12-09', 'time' => '21:57:45', 'value' => 5, 'in_out' => 'Incoming' ],
[ 'date' => '2014-12-09', 'time' => '21:57:15', 'value' => 3, 'in_out' => 'Incoming' ],
[ 'date' => '2014-12-09', 'time' => '21:57:15', 'value' => 6, 'in_out' => 'Outgoing' ]
// etc...
];
function array_combine_in_out($oldArrays)
{
$newArrays = [];
foreach ($oldArrays as $oldArray) {
$timestamp = $oldArray['date'] . ' ' . $oldArray['time'];
if (!array_key_exists($timestamp, $newArrays)) {
$newArrays[$timestamp] = [
'date' => $oldArray['date'],
'time' => $oldArray['time'],
'out_value' => null,
'in_value' => null
];
}
if ($oldArray['in_out'] == 'Outgoing') {
$newArrays[$timestamp]['out_value'] = $oldArray['value'];
}
if ($oldArray['in_out'] == 'Incoming') {
$newArrays[$timestamp]['in_value'] = $oldArray['value'];
}
}
return array_values($newArrays);
}
$newArrays = array_combine_in_out($oldArrays);
这是正确的,每次传入/传出的时间都完全相同。我来试试。谢谢你的帮助。我做了一些修改,但你让我朝着正确的方向开始了。谢谢。我感谢你的帮助。