Сумма массива с дублированными значениями ключей php - PullRequest
0 голосов
/ 05 апреля 2019

Я массив, как это, теперь я хочу, чтобы сумма комиссии с тем же оригинатор имя.

и создайте новый массив, используя это, так что здесь есть 3 хима cima, мне нужен один массив из тех, где fee_potetial - сумма всех остальных, где инициатор - хима cima.

$formEntries возвращает такие значения:

Array
(
    [0] => Array
        (
            [entry_id] => 54
            [0] => 1
            [fee_potential] => 100
            [originator] => cima haves

        )

    [1] => Array
        (
            [entry_id] => 55
            [0] => 1
            [fee_potential] => 600
            [originator] => steve

        )

    [2] => Array
        (
            [entry_id] => 56
            [0] => 1
            [fee_potential] => 500
            [originator] => cima haves

        )

    [3] => Array
        (
            [entry_id] => 57
            [0] => 1
            [fee_potential] => 500
            [originator] =>  cima haves

        )

)

Вот код, который я пытался изолировать:

$originator = array_column($formEntries, 'originator');
$originator = array_unique($originator);
$array_filter = array_filter($formEntries, function ($key, $value) use ($originator) {
    return in_array($value, array_keys($originator));
}, ARRAY_FILTER_USE_BOTH);

Мне нужен вывод [fee_potential] => 1100 это сумма

Array
    (
        [0] => Array
            (
                [entry_id] => 54
                [0] => 1
                [fee_potential] => 1100
                [originator] => cima haves

            )

        [1] => Array
            (
                [entry_id] => 55
                [0] => 1
                [fee_potential] => 600
                [originator] => steve

            )
    )

Ответы [ 3 ]

2 голосов
/ 05 апреля 2019

Просто попробуйте перебрать все элементы, подобные этому

$final_arr = array();
foreach($formEntries as $value){
    if(isset($final_arr[$value['originator']])){
        $final_arr[$value['originator']]['fee_potential'] += $value['fee_potential'];
    }
    else{
        $final_arr[$value['originator']] = $value;
    }

}

Он проверит, существует ли originator в конечном массиве.Если это так, он будет суммировать значение, иначе он назначит этот массив вместе с fee_potential.

2 голосов
/ 05 апреля 2019

Простой цикл foreach сделает это просто

$totals = [];

foreach( $formEntries as $entry) {
    if( isset($totals[$entry['originator']]){
        $totals[$entry['originator']]['fee_potential'] += $entry['fee_potential'];
    } else {
        $totals[$entry['originator']]['fee_potential'] = $entry['fee_potential'];
    }
}
0 голосов
/ 05 апреля 2019

Попробуйте этот код, он хорошо работает Проверено.

$result = array();
foreach($formEntries as $key => $v){
   if(in_array($v['originator'], array_column($result, 'originator'))){
      $result[array_search($v['originator'], array_column($result, 'originator'))]['fee_potential'] += $v['fee_potential'];
   }else{
      $result[$key] = $v;
   }
}

Результат: -

Array
(
    [0] => Array
        (
            [entry_id] => 54
            [0] => 1
            [fee_potential] => 1100
            [originator] => cima haves

        )

    [1] => Array
        (
            [entry_id] => 55
            [0] => 1
            [fee_potential] => 600
            [originator] => steve

        )
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...