Группа многомерных ассоциативных массивов, фильтр и эхо - PullRequest
0 голосов
/ 27 января 2020

Может кто-нибудь дать мне несколько подсказок? Неважно, если я попробую это с array_column, array_pu sh, array_filter, array_diff ... где-нибудь по пути, я ВСЕГДА совершаю ошибку.

Я хочу сгруппировать многомерный ассоциативный массив, отфильтровать его и повторить groups.

Мой массив, например:

$cars = [
    ['Hersteller' => 'Audi',
        'Modell' => 'Btron',
        'Preis' => '60.000 €'
    ],
    ['Hersteller' => 'Tesla',
        'Modell' => 'Unununium',
        'Preis' => '5.000 €'
    ],
    ['Hersteller' => 'Audi',
        'Modell' => 'Quattro',
        'Preis' => '40.000 €'
    ],
    ['Hersteller' => 'Opel',
        'Modell' => 'Astra',
        'Preis' => '20.000 €'
    ],
    ['Hersteller' => 'Abba',
        'Modell' => 'Golf',
        'Preis' => '2.000 €'
    ],
    ['Hersteller' => 'Lamborghini',
        'Modell' => 'Diablo',
        'Preis' => '95.000 €'
    ],
    ['Hersteller' => 'Tesla',
        'Modell' => 'Roadster',
        'Preis' => '65.000 €'
    ],
];

Я хочу сгруппировать по производителю / Hersteller - отфильтровав его в новый массив, удалить новые массивы из исходного массива и повторить каждый array.

$cars2 = [];
$cars3 = [];
$cars4 = [];
$cars2 = array_filter($cars, function ($var) {
    return ($var['Hersteller'] == 'Audi');
});
$cars3 = array_filter($cars, function ($var) {
    return ($var['Hersteller'] == 'Tesla');
});

$cars4 = array_diff($cars, $cars2, $cars3);

... и отобразить каждый массив с помощью foreach ($ cars2 как $ car) {echo ''. Герштеллер: $ cars2 ['Hersteller'] ...

Моя проблема (прежде всего) с array_diff!

1 Ответ

1 голос
/ 27 января 2020

Поскольку array_diff() не очень хорошо работает с многомерными массивами (ему нравится работать со строками), вы можете использовать array_udiff(), что означает, что вы должны написать собственное сравнение. Но благодаря оператору космического корабля (<=>) вы можете сравнить значения, используя это ...

$cars4 = array_udiff($cars, $cars2, $cars3, function ( $a, $b) {
    return $a <=> $b;
});
...