Libiros
@Libiros
Frontend developer

Как преобразовать сложную строку в ассоциативный массив?

Мне необходимо преобразовать сложную строку в простой ассоциативный массив.

Вот, код, который работает, но меня не устраивает:
$string = 'a:1|b:2|c:3|a:4';
        $array1 = array();
        $array2 = explode('|', $string);
        foreach($array2 as $str) {
            list($key, $value) = explode(':', $str);
            $array1[$key] = $value;
        }
        echo('<pre>');
        print_r($array1);
        echo('</pre>');

Здесь мы видим, что "a" повторяется дважды и, само собой, заменяется последним значением. На выходе я получаю:
Array
(
    [a] => 4
    [b] => 2
    [c] => 3
)

Но мне нужно сделать так, чтобы одинаковые ключи складывались. То есть выход должен быть следующим:
Array
(
    [a] => 5
    [b] => 2
    [c] => 3
)


Как это сделать?
  • Вопрос задан
  • 241 просмотр
Решения вопроса 2
$string = 'a:1|b:2|c:3|a:4';
$array1 = array();
$array2 = explode('|', $string);
foreach($array2 as $str) {
  list($key, $value) = explode(':', $str);
  $array1[$key] = array_key_exists($key, $array1) ? $array1[$key] + $value : $value;
}
echo('<pre>');
print_r($array1);
echo('</pre>');
Ответ написан
Комментировать
denikod
@denikod
Web-программист
$string = 'a:1|b:2|c:3|a:4';

$a = array();
foreach( explode("|", $string) as $pair )
{
  $pair = explode(":", $pair);
  if( ! isset($a[$pair[0]]) ) $a[$pair[0]] = $pair[1];
  else $a[$pair[0]] += $pair[1];
}

echo('<pre>');
print_r($a);
echo('</pre>');
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mxuser
@mxuser
Программист
$string = 'a:1|b:2|c:3|a:4';
        $array1 = array();
        $array2 = explode('|', $string);
        foreach($array2 as $str) {
            list($key, $value) = explode(':', $str);
            $array1[] = [$key => $value];
        }
        echo('<pre>');
        print_r($array1);
        echo('</pre>');
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы