Как я могу обрезать данные из значения внутри массива? - PullRequest
1 голос
/ 21 марта 2019

Это мои данные:

$d = $request->request->get('data');

Выход:

[{"name":"form[id]","value":"10"},{"name":"form[name]","value":"Telefon2"},{"name":"form[uuid]","value":"bb80878ad4"},{"name":"form[productgroup]","value":"6"},{"name":"form[category]","value":"1"},{"name":"form[documents]","value":"7"}

Я хочу создать новый массив, который удаляет извлечение переменной в скобках.

 function trim($d) {
          preg_match('#\[(.*?)\]#', $d, $match);
          return $match[1];
   }


$dData = array_combine(array_column(trim($d), 'name'), array_column($d, 'value'));
$json = json_encode($dData);

Но ошибка

Предупреждение: preg_match () ожидает, что параметр 2 будет строкой, задан массив

Ответы [ 2 ]

2 голосов
/ 21 марта 2019

Вам нужно будет сделать несколько вещей, прежде чем начать.

Во-первых, переименуйте функцию trim во что-то вроде extract_name, потому что PHP уже имеет встроенную функцию trim, которая удаляет пробел из строки - или любой символ, присутствующий в маске символа.
Во-вторых, вам нужно будет перебирать каждый элемент в столбце имени. Вы заметите ошибку, которую вы получаете от preg_match, потому что вы передаете все значения за один раз.
В-третьих, я предполагаю, что значение $d является массивом объектов PHP. Это сделано, и предполагается, что в моем решении, используя $d = json_decode($d);.

Использование array_map вместо foreach означает, что у нас может быть хороший лайнер:

function extract_name($d) {
    preg_match('#\[(.*?)\]#', $d, $match);
    return $match[1];
}

$dData = array_combine(array_map('extract_name', array_column($d, 'name')), array_column($d, 'value'));

Вывод:

array:6 [
  "id" => "10"
  "name" => "Telefon2"
  "uuid" => "bb80878ad4"
  "productgroup" => "6"
  "category" => "1"
  "documents" => "7"
]

Демонстрационная версия

0 голосов
/ 21 марта 2019

Я полагаю, вам нужно что-то подобное


$d = ['{"name":"form[id]","value":"10"}', '{"name":"form[name]","value":"Telefon2"}', '{"name":"form[uuid]","value":"bb80878ad4"}', '{"name":"form[productgroup]","value":"6"}'];

function combine(array $d): array
{
    $res = [];
    foreach ($d as $item) {
        $value = json_decode($item, true);
        preg_match('#\[(.*?)\]#', $value['name'], $match);;
        $columnName = $match[1];
        $res[$columnName] = $value['value'];
    }

    return $res;
}


$dData = combine($d);
$json = json_encode($dData);
echo $json;```
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...