按具有特定键前缀的元素对平面关联数组进行分组,并将前面的元素累积到父组中

问题描述 投票:0回答:2

我需要将关联数组转换为二维数组。原始数组如下。

$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>"],
]
php arrays grouping associative-array
2个回答
1
投票

使用单个循环,有条件地保存临时数据,直到遇到合格的 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()
将是更简单解决方案的一部分。


0
投票
$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);
© www.soinside.com 2019 - 2024. All rights reserved.