Суммировать целое число со строкой и объединять с одной строкой - PHP - PullRequest
0 голосов
/ 03 февраля 2020

У меня проблема с этим массивом, мне нужно получить слияние строки формы суммы с тем же ключом

$data = array(
        0 => array(
          'name' => 'Alfa Edison, Dwiki',
          'budget' => 3700,
        ),
        1 => array(
          'name' => 'Maverick Sam',
          'budget' => 500,
        ),
        2 => array(
          'name' => 'Dwiki',
          'budget' => 1000,
        ),
        3 => array(
          'name' => 'Steve, Dwiki',
          'budget' => 2000,
        ),
        4 => array(
          'name' => 'Alfa Edison',
          'budget' => 700,
        ),
        5 => array(
          'name' => 'Maverick Sam',
          'budget' => 4000,
        ),
        6 => array(
          'name' => 'Steve, Alfa Edison',
          'budget' => 334,
        ),
      );

Я хочу получить такой результат:

array(
        0 => array(
          'name' => 'Alfa Edison',
          'budget' => 4734,
        ),
        1 => array(
          'name' => 'Dwiki',
          'budget' => 6700,
        ),
        2 => array(
          'name' => 'Maverick Sam',
          'budget' => 4500,
        ),
        3 => array(
          'name' => 'Steve',
          'budget' => 2334,
        ),
      );

Как объединить строку с Тот же ключ и сумма бюджета. Я стараюсь для каждого, но я терплю неудачу. я пытаюсь использовать array_reduce и взорвать имя, но потерпел неудачу.

1 Ответ

1 голос
/ 03 февраля 2020

Проблема в том, что каждый из «ключей» (имен) действительно больше, чем один ключ. Поэтому, когда вы перебираете входной массив, вам нужно разделить их, а затем добавить внутренний l oop, чтобы использовать имена в качестве ключей в результате.

foreach ($data as $item) {

    // separate the names
    $names = explode(', ', $item['name']);

    // iterate the names and set/increase values for them in the result array
    foreach ($names as $name) {
        $result[$name]['name'] = $name;
        $result[$name]['budget'] = $item['budget'] + ($result[$name]['budget'] ?? 0);
    }
}

// remove the string keys if necessary
$result = array_values($result);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...