@kickass77

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

$a = "Артем=>4,Максим.Антон=>421414,Алина=>222,";

Как разбить эту строку и вывести циклом, чтобы был следующий вид:

Имя: $name;
Значение: $value;


UP: Посмотрите мои ответы ниже, есть небольшая проблема с Notice: Undefined offset: 1 in file.php on line 63
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
delphinpro
@delphinpro Куратор тега PHP
frontend developer
Парсинг и вывод:
$a = "Артем=>4,Максим.Антон=>421414,Алина=>222,";
$a = trim($a, ', \n\r\t\v\x00');

$result = call_user_func_array(
    'array_merge_recursive',
    array_map(function($str){
        [$key, $value] = explode('=>', $str);
        return [$key => $value];
    }, explode(',', $a))
);

foreach ($result as $key => $value) {
    echo $key . ' : ' . $value . "<br>\n";
}


Если структура получаемого массива не критична, то можно проще:

$a = "Артем=>4,Максим.Антон=>421414,Алина=>222,";
$a = trim($a, ', \n\r\t\v\x00');

$result = array_map(fn($str) => explode('=>', $str), explode(',', $a));

foreach ($result as $v) {
    echo $v[0] . ' : ' . $v[1] . "<br>\n";
}


По второй проблеме:
foreach ($_GET['aServicesObj'] as $key => $value) {
    $serv .= $key.'=>'.$value.',';
}

$serv = trim($serv, ',');


UPD
А почему бы не использовать json?

//foreach ($_GET['aServicesObj'] as $key => $value) {
//    $serv .= $key.'=>'.$value.',';
//}
$serv = json_encode($_GET['aServicesObj']);


и

$result = json_decode($serv);

foreach ($result as $k => $v) {
    echo $k . ' : ' . $v . "<br>\n";
}


Или query string

$data = [
    'Артем' => 4,
    'Максим.Антон' => 421414,
    'Алина' => 222,
];
$serv = http_build_query($data);

/////////////////

parse_str($serv, $result);

foreach ($result as $k => $v) {
    echo $k . ' : ' . $v . "<br>\n";
}


Не обязательно изобретать собственные форматы данных, когда готовых куча =)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@kickass77 Автор вопроса
$convert_to_array = explode(',', $a); // Моя строка "Артем=>4,Максим.Антон=>421414,Алина=>222,"

              $end_array = array();

              for($i=0; $i < count($convert_to_array ); $i++){
                  $key_value = explode('=>', $convert_to_array [$i]);
                  $end_array[$key_value [0]] = $key_value [1];
              }

              foreach($end_array as $key => $value) {
                  echo '
                    <input name="'.$value.'" value="'.$key.'">
                  ';
              }


Все работает, но есть проблема - выводит еще один элемент в конце пустой, ибо в конце строки стоит запятая - вот и тянет. Как избавиться от этого?
Потому что в переменную $a данные записываются так:

foreach ($_GET['aServicesObj'] as $key => $value) {
        $serv .= $key.'=>'.$value.',';
    }


UP:
foreach(array_slice($end_array, 0, count($end_array) - 1) as $key => $value)


Последний элемент не выводится.
Но выводит следующее:
Notice: Undefined offset: 1 in file.php on line 63

63 строка - последняя в цикле:

for($i=0; $i < count($convert_to_array ); $i++){
                  $key_value = explode('=>', $convert_to_array [$i]);
                  $end_array[$key_value [0]] = $key_value [1];
              }
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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