首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将相似的行分组并将分组数据转到新的关联元素中。

将相似的行分组并将分组数据转到新的关联元素中。
EN

Stack Overflow用户
提问于 2022-06-11 15:30:17
回答 2查看 74关注 0票数 0

我有一个原始数据数组如下所示

代码语言:javascript
复制
$data = [
                [
                    "content" => "Niche description 1",
                    "type" => "niche_des"
                ],
                [
                    "content"  => "Niche description 2",
                    "type" => "niche_des"
                ],
                [
                    "content" => "Niche description 3",
                    "type" => "niche_des"
                ],
                [
                    "content" => "Product description 1",
                    "type" => "product_des"
                ],
                [
                    "content" => "Product description 2",
                    "type" => "product_des"
                ],
                [
                    "content" => "Product description 3",
                    "type" => "product_des"
                ],
                [
                    "content" => "Trust site description 1",
                    "type" => "trust_site"
                ],
                [
                    "content" => "Trust site description 2",
                    "type" => "trust_site"
                ],
                [
                    "content" => "Trust site description 3",
                    "type" => "trust_site"
                ]
            ];

我试着把数据放入这样一个新的数组中,但是它没有工作

这就是我想要的结果

代码语言:javascript
复制
$newdata = [
                [
                    "niche_des" => "Niche description 1",
                    "product_des" => "Product description 1",
                    "trust_site" => "Trust site description 1"
                ],
                [
                    "niche_des" => "Niche description 2",
                    "product_des" => "Product description 2",
                    "trust_site" => "Trust site description 2"
                ],
                [
                    "niche_des" => "Niche description 3",
                    "product_des" => "Product description 3",
                    "trust_site" => "Trust site description 3"
                ],
            ];

我试着用这种方式处理

代码语言:javascript
复制
$newdata = [];
foreach ($data as $des) {
    if ($des->type == 'niche_des') {
        $niche = $des->content;
    }
    if ($des->type == 'product_des') {
        $product_d = $des->content;
    }
    if ($des->type == 'trust_site') {
        $trust_site = $des->content;
    }
    array_push($newdata, [
        'niche_des' => $niche,
        'product_des' => $product_d,
        'trust_site' => $trust_site
    ]);
}
EN

回答 2

Stack Overflow用户

发布于 2022-06-12 10:04:38

您的代码有两个问题,我可以看到:

  1. 您正在尝试使用对象访问表示法(->)访问数组。您需要使用数组访问符号(['...'])。
  2. 没有正确地计算数组元素。

因为您在评论中已经说过数据可能并不总是相同的,所以这个两步的过程就是我处理它的方式:

步骤1.按类型拆分原始数组:

代码语言:javascript
复制
$tempdata = [];
foreach ($data as $des) {
    if (!isset($tempdata[$des['type']])) {
        $tempdata[$des['type']] = [];
    }

    $tempdata[$des['type']][] = $des['content'];
}

$tempdata现在看起来如下所示:

代码语言:javascript
复制
[
    "niche_des" => [
        "Niche description 1",
        "Niche description 2",
        "Niche description 3",
    ],
    "product_des" => [
        "Product description 1",
        "Product description 2",
        "Product description 3",
    ],
    "trust_site" => [
        "Trust site description 1"
        "Trust site description 2"
        "Trust site description 3"
    ],
];

步骤2.将上面的拆分数组重新构建成所需的格式。

代码语言:javascript
复制
$newdata = [];
$types = array_keys($tempdata);
$itemcount = count($tempdata[$types[0]]);

for ($i = 0; $i < $itemcount; $i++) {
    $item = [];

    foreach ($types as $type) {
        $item[$type] = $tempdata[$type][$i];
    }

    $newdata[] = $item;
}

重要:上面的解决方案要求以下两个条件为真:

  1. 每种类型的元素数量总是相同的。
  2. 它们的元素已经按照正确的顺序排列(即niche_des #1匹配product_des #1和trust_site #1)。
票数 0
EN

Stack Overflow用户

发布于 2022-06-13 21:54:51

您可以使用许多技术来隔离每个content列值的尾随整数(我将演示ltrim()、ing字母和空格...and,ascii表上的六个无关符号)。对该整数分组,将所需数据推入每个组,然后在循环完成后,通过调用array_values()删除临时分组键。

代码:(演示)

代码语言:javascript
复制
$result = [];
foreach ($data as $row) {
    $result[ltrim($row['content'], 'A..z ')][$row['type']] = $row['content'];
}
var_export(array_values($result));

输出:

代码语言:javascript
复制
array (
  0 => 
  array (
    'niche_des' => 'Niche description 1',
    'product_des' => 'Product description 1',
    'trust_site' => 'Trust site description 1',
  ),
  1 => 
  array (
    'niche_des' => 'Niche description 2',
    'product_des' => 'Product description 2',
    'trust_site' => 'Trust site description 2',
  ),
  2 => 
  array (
    'niche_des' => 'Niche description 3',
    'product_des' => 'Product description 3',
    'trust_site' => 'Trust site description 3',
  ),
)
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72585636

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档