从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);

这是正确的,每次传入/传出的时间都完全相同。我来试试。谢谢你的帮助。我做了一些修改,但你让我朝着正确的方向开始了。谢谢。我感谢你的帮助。