我需要将关联数组转换为二维数组。原始数组如下。
$data = [
"data" => "data",
"id_1553539135251" => "<p>nsmn</p>",
"about" => "about",
"id_1553539141598" => "<p>uiu</p>",
]
我的代码:
$data = $request->all();
$json = array();
foreach ($data as $key => $value) {
if (strpos($key, 'id') !== false) {
$json[$key]['content'] = $value;
}
}
我需要以下输出。
[
"id_1553539135251" => ["content" => "<p>nsmn</p>", "data" => "data"],
"id_1553539141598" => ["content" => "<p>uiu</p>", "about" => "about"]
]
但是我的代码输出
[
"id_1553539135251" => ["content" => "<p>nsmn</p>"],
"id_1553539138029" => ["content" => "<p>jjkjk</p>"],
"id_1553539141598" => ["content" => "<p>uiu</p>"],
]
使用单个循环,有条件地保存临时数据,直到遇到合格的 id,或者在遇到合格的 id 时将新条目推送到结果数组中。
代码:(演示)
$result = [];
$temp = [];
foreach ($array as $k => $v) {
if (str_starts_with($k, 'id_')) {
$result[$k] = ['content' => $v] + $temp; // prepend the content element, then push into the result
$temp = []; // start a fresh temporary variable
} else {
$temp[$k] = $v; // accumulate elements per group
}
}
var_export($result);
该脚本可以灵活地对每组不规则数量的元素进行分组。 如果您的输入数组保证始终将两个相邻元素配对,那么
array_chunk()
将是更简单解决方案的一部分。
$test = array(
array(
"data" => "data",
"id_1553539135251" => "<p>nsmn</p>",
"about" => "about",
"id_1553539141598" => "<p>uiu</p>"
),
);
$output = array();
foreach ($test as $item) {
$i = 0;
$tt = '';
foreach ($item as $k => $v) {
if (strpos($k, 'id') !== false) {
$output[$k] = array(
'content' => $item[$k],
'header' => $tt,
);
} else {
$tt = $v;
}
}
}
print_r($output);