这是我的数据
$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为字符串,给定数组
答案 0 :(得分:2)
开始之前,您需要做一些事情。
首先,将trim
函数重命名为extract_name
之类的内容,因为PHP已经具有内置的trim
函数,该函数可从字符串或字符掩码中存在的任何字符中删除空格。
其次,您将需要遍历name列中的每个元素。您会注意到从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"
]
答案 1 :(得分:-1)
我相信您需要这样的东西
$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;```