Нужно объединить PHP-массив по повторяющимся значениям в нескольких ключах - PullRequest
0 голосов
/ 10 июня 2018

У меня есть массив, который имеет более 1000 значений.Этот массив находится в файле php, я буду возвращать результаты в другой массив для вывода в файл Excel.Помощь будет принята с благодарностью

Array
(
[0] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => PXB
        [low] => 24.99
    )
[1] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => PXB
        [low] => 31.99
    )
[2] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => PXB
        [low] => 38.99
    )
[3] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => MXB
        [low] => 24.99
    )
[4] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => MXB
        [low] => 31.99
    )
[5] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => MXB
        [low] => 38.99
    )
[6] => Array
    (
        [isbn] => 97845684978
        [price] => 30.99
        [po] => PXB
        [low] => 18.99
    )
[7] => Array
    (
        [isbn] => 97845684978
        [price] => 30.99
        [po] => PXB
        [low] => 19.99
    )
[8] => Array
    (
        [isbn] => 97845684978
        [price] => 30.99
        [po] => PXB
        [low] => 23.99
    )
)

Мне нужно иметь возможность сортировать массив и возвращать вывод с isbn для каждого po, сохраняя самое низкое значение low для этого po.Мне нужно отсортировать по isbn, po и low.Поэтому я ищу вывод как:

 Array
(
[0] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => PXB
        [low] => 24.99
    )
[1] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => MXB
        [low] => 31.99
    )
[2] => Array
    (
        [isbn] => 97845684978
        [price] => 30.99
        [po] => PXB
        [low] => 18.99
    )
[3] => Array
    (
        [isbn] => 97845684684
        [price] => 30.99
        [po] => MXB
        [low] => 15.99
    )

1 Ответ

0 голосов
/ 10 июня 2018

Используйте usort для фильтрации нижнего уровня:

$array = //your array

function cmp($a, $b) {
    if ($a['po'] == $b['po'] && $a['isbn'] == $b['isbn']) {
       return ($a['low'] < $b['low']) ? -1 : 1;
    }else{
        return 0;
    }

}

usort($array, 'cmp');

Цикл Foreach для повторного заполнения массива.

<code>$po = null;
$isbn = null;
$result = [];
foreach($array as $key =>$val){    
    if($val['po']==$po && $val['isbn']==$isbn){
    }else{
        $result[] = $val; 
    }
    $isbn = $val['isbn'];
    $po = $val['po'];
}
echo '<pre>';
print_r($result);
echo '
';
...