按列对 3d 数组中的行数据进行分组,并合并每组中的子数组数据

2024-05-02

我有一个下面提到的数组。

$array = array(
        '0' => array(
            'names' => array(0 => 'Apple'),
            'group' => 1
        ),
        '1' => array(
            'names' => array(0 => 'Mango'),
            'group' => 1
        ),
        '2' => array(
            'names' => array(0 => 'Grapes'),
            'group' => 1
        ),
        '3' => array(
            'names' => array(0 => 'Tomato'),
            'group' => 2
        ),
        '4' => array(
            'names' => array(0 => 'Potato'),
            'group' => 2
        )
    );

我希望结果是这样的:如果数组键“group”的值相同,则应该合并键“names”的值。我想要下面提到的输出。

    $array = array(
        '0' => array(
            'names' => array(0 => 'Apple', 1 => 'Mango', 2 => 'Grapes'),
            'group' => 1
        ),
        '1' => array(
            'names' => array(0 => 'Tomato', 1 => 'Potato'),
            'group' => 2
        )
    );

PHP函数的完美使用示例array_reduce() http://php.net/manual/en/function.array-reduce.php:

$array = array_values(
    array_reduce(
        $array,
        function (array $carry, array $item) {
            // Extract the group name into a variable for readability
            // and speed; it is used several times velow
            $key = $item['group'];
            // Initialize the group if it is the first entry in this group
            if (! array_key_exists($key, $carry)) {
                $carry[$key] = array(
                    'names' => array(),
                    'group' => $key,
                );
            }
            // Add the new names to the group in the output array
            $carry[$key]['names'] = array_merge($carry[$key]['names'], $item['names']);

            // Return the partial result
            return $carry;
        },
        array()
    )
);

代码使用array_reduce() http://php.net/manual/en/function.array-reduce.php迭代构建一个包含预期值的新数组。

如果需要,回调函数会创建组,然后将已处理项的名称合并到结果数组中的现有组中。

使用生成的数组array_reduce()使用以下值进行索引group,按照它们在输入数组中出现的顺序。对于发布的数组,它们的键将是1 and 2。如果您不关心按键,请删除对array_values()以获得速度和可读性的一点提高。

功能array_values() http://php.net/manual/en/function.array-values.php删除键并返回一个使用从零开始的顺序数字键(如问题中列出的键)索引的数组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

按列对 3d 数组中的行数据进行分组,并合并每组中的子数组数据 的相关文章

  • 如何使用 PHP 从内容中查找 URL?

    需要一个简单的 preg match 它将在内容中查找 c aspx 不带引号 如果找到 它将返回整个 url 举个例子 content div 4 a href m c aspx mt 01 9310ba801f1255e02e411d8
  • 当用户再次访问同一页面时保持登录状态?

    目前我正在使用会话来登录用户 但是当我关闭浏览器并再次打开它时 我必须再次登录 你如何让用户在 2 周内保持登录状态 那么是通过cookie吗 那么您想要 在这台计算机上记住我 选项吗 这是一种与语言无关的方法 创建一个至少包含以下内容的数
  • PHP:STR 替换为链接

    我有这个 PHP 聊天框 如果我在聊天框中键入链接 它不会将其显示为链接 我如何使用 STR 替换来执行此操作 它应该响应诸如 http http com nl www www 之类的内容 我的其他 STR 替换行如下所示 bericht
  • PHP服务器端IAB验证openssl_verify总是返回0

    我使用以下函数 服务器端 php 来验证 IAB v3 事务 我从 Android 应用程序传递过来 Override protected void onActivityResult int requestCode int resultCo
  • json_encode 创建格式错误的 JSON 数据?

    我有一个 codeigniter 应用程序将一些数据从数据库返回到视图 我正在尝试将其作为 json 数据发送回来 问题是返回的数据格式错误 它看起来像这样 2 5 Admin1 2 10 Admin2 当我在 jsonlint com 上
  • 如何使用 Perl 分割文本文件并将其存储到二维数组中?

    230215 01 16 2000 57533 0 1045403 0 0 217623 230215 01 18 2000 77659 0 1045403 0 0 217624 230215 01 25 2000 76583 0 1045
  • 如何将 .env 添加到 codeigniter?

    我尝试按照以下步骤使 php 连接到 Outlookhttps learn microsoft com en us outlook rest php tutorial https learn microsoft com en us outl
  • 正则表达式替换混合数字+字符串

    我想删除所有包含数字的单词 示例 LW23 London W98 String 从上面的字符串中我唯一想保留的是 London String 这可以用正则表达式来完成吗 我目前正在使用 Python 但 PHP 代码也很好 Thanks E
  • 如何在 Laravel Mix 中将公共路径更改为包含下划线的路径?

    Laravel 5 4 中引入了 Mix 来编译资产并维护资产管道 Mix 默认为您的公共目录被命名public 在许多情况下 包括我的 我的公共目录被称为其他名称 就我而言 是public html 如何更改资源编译到的公共目录 我尝试过
  • 获取目录中最后修改的文件

    有没有办法只选择目录中的最后一个文件 扩展名jpg png gif 或者我是否必须解析整个目录并使用进行检查filemtime 是的 你必须通读它们 但由于目录访问已被缓存 因此您不必真正担心它 files array merge glob
  • 如何在javascript中动态向对象数组添加值?

    这是一个对象数组 var data label 1 value 12 label 1 value 12 label 1 value 12 label 1 value 12 我如何动态地为这些添加值 我尝试了以下代码但没有成功 var lab
  • 我的 PHP 代码不会将记录插入到 mySQL 数据库表中[关闭]

    这个问题不太可能对任何未来的访客有帮助 它只与一个较小的地理区域 一个特定的时间点或一个非常狭窄的情况相关 通常不适用于全世界的互联网受众 为了帮助使这个问题更广泛地适用 访问帮助中心 help reopen questions 我的网站上
  • 计算轮班工作时间并检测

    我有个问题 我的英语很差 我需要用PHP做一个加班计算 已经有一个代码可以实现这一点 但当工作时间超过2天时 计算就会出错 工作开始 2018 09 09 13 43 工作结束 2018 09 11 07 13 结果 07 18 04 00
  • 从文本文件 PHP 读取数据

    我只是想知道如何在 php 中读取文本文件 我想让它显示文本文件中的最后 200 个条目 每个条目都在一个新行上 Like John White Jane Does John Does Someones Name 等等 Thanks Use
  • 将单独的月、日和年值转换为时间戳

    我有月份值 1 12 日期值 1 31 和年份值 2010 2011 2012 我还有一个小时值和一个分钟值 我怎样才能把这个给strtotime 它可以以某种方式将其转换为时间戳吗 当您已经知道年月和日期时 为什么将字符串转换为日期 us
  • PHP URL 验证

    我知道有无数的线程问这个问题 但我一直无法找到一个可以帮助我解决这个问题的线程 我基本上试图解析大约 10 000 000 个 URL 的列表 确保它们根据以下标准有效 然后获取根域 URL 此列表包含您能想象到的几乎所有内容 包括类似的内
  • Slim 3 - 斜杠作为路由参数的一部分

    我需要使用可以包含斜杠 的参数来编写 URL 例如 经典的 hello username 路线 默认情况下 hello Fabien将匹配此路线 但不匹配 hello Fabien Kris 我想问你如何在 Slim 3 框架中做到这一点
  • 如果文件名减去扩展名,.htaccess url 重写行为将被覆盖。与网址相同

    我正在尝试整理 URL 并从中删除 php 扩展名等 我位于网站的基本文件夹中 因此没有可以优先处理的父 htaccess 文件或其他文件 这是我的 htaccess 代码 RewriteEngine On RewriteRule give
  • 如何在php中关闭夏令时

    我有这行代码将夏令时设置为 打开 将其设置为 关闭 的正确方法是什么 is daylight saving On rcmail config dst active bool date I date I 这是一个大写字母 i 当当前默认时区
  • 如何根据另一个下拉列表中的选择动态填充下拉列表中的选项?

    我有一个表 其中包含类别信息 例如产品 我已将它们列在下拉菜单中 现在 我需要做的是 在下一个下拉菜单中列出所选类别的子类别 我希望 javascript 是必需的 但我对 javascript 还不太熟悉 将非常感谢您的帮助 你应该使用

随机推荐