Объединить 3 массива PHP 7

159
08 апреля 2019, 03:10

Нужно объединить 3 массива в один.

<?
define('prof', [
    'plumber',
    'engineer',
    'administrator',
    'manager',
    'director',
    'loader'
]);
define('pay', [
    '25000',
    '30000',
    '20000',
    '50000',
    '100000',
    '25000'
]);
define('effect', [
    '12',
    '20',
    '15',
    '15',
    '30',
    '8'
]);
?>

И сделать выборку исходя из процентов массива effect кто заслужено получил зарплату!

т.е. какие профессии получили зп, правильно, исходя из эффективности, пример если менеджер работал 15% и получил 50000, то не стыковка в плане администратор работал 15% и получил всего 20000, вот она не заслуженная зарплата)

Answer 1

в целом для решения этой задачи вам пригодятся функции array_map, array_filter и array_sum. Можете, конечно, и руками в циклах все считать.

Сначала посчитаем весь фонд зп:

$ptotal = array_sum(pay);

далее тут функции можно всяко комбинировать, в более наглядном варианте сначала объединим массивы:

$data = array_map(function($p, $s, $e){
                return ['prof' => $p, 'pay' => $s, 'effect' => $e];
            }, prof, pay, effect);

или аналогично:

$data = array_map(function(...$v){
                return array_combine(['prof', 'pay', 'effect'], $v);
            }, prof, pay, effect);

потом отфильтруем:

$result = array_filter($data, function(&$v) use ($ptotal){
                return $v['pay'] / $ptotal * 100 >= $v['effect'];
            });

можно и по другому логику встраивать, например при маппинге сразу считать долю зп, и если не устраивает то возвращать null. Тогда в фильтрации уже не нужен обратный вызов.

$result = array_filter(array_map(function($p, $s, $e) use ($ptotal){
                $x = $s / $ptotal * 100 >= $e;
                return !$x ? null  : [
                        'prof' => $p,
                        'pay' => $s,
                        'effect' => $e
                    ];
            }, prof, pay, effect));

зы: что касается того, как просто слить массивы, то можно сделать

$data = array_map(null, prof, pay, effect);
READ ALSO
Как изменить битность версии php на x64?

Как изменить битность версии php на x64?

У меня ноутбук с установленной лицензионной windows 10 x64На локальный OpenServer x64 установил чистый сайт на wordpress, хочу импортировать на него данные...

178
Как установить вручную индексы в цикле for PHP?

Как установить вручную индексы в цикле for PHP?

Как установить вручную все индексы $i в цикле for PHP без всякого шага, чтобы отдельно с каждой переменной не связываться?

192
При выводе одной записи из базы методом getById($id) возвращает bool(false)

При выводе одной записи из базы методом getById($id) возвращает bool(false)

При выводе одной записи из базы методом getById($id) возвращает bool(false) но метод getAll() работает нормально

183