如何在PHP中将数组转换为映射?

6
这是基于我之前提出的一个问题。 假设我运行了一个SQL查询,并将以下内容存储到变量$res中:
name    |    language
-------------------------
bob     |   English
bob     |   Dutch
Sally   |   English
Sally   |   Spanish
Sally   |   German

$res["name"] 目前等于第一列等。

是否有 PHP 函数或函数序列(无需编写循环),可以将 $res 转换为映射,以便我可以编写 $res["bob"] 并接收数组 ["English", "Dutch"]$res["Sally"] 并接收 ["English", "Spanish", "German"]

4个回答

10
$map = array();
foreach ($mysqlResult as $row) {
    $map[$row['name']][] = $row['language'];
}

谢谢。但是我明确表示我不想使用循环。请参考所选答案,了解我的意思。 - twerdster
1
@twerdster,你确实指定了要一个PHP函数。在这里使用循环没有任何问题,这是最直接的答案。 - deceze
好观点。我给你点赞。幸运的是,有人能够看穿我的问题表达方式,并回答了我的真正问题。 - twerdster

1

如果有本地函数,它也会在内部使用循环。

$res = array();
foreach($old as $value) {
   $res[$value['name']][] = $value['language'];
}

编辑:我看到这是一对多的关系:)


1

1
太棒了!你是唯一一个在这个话题的三篇不同帖子中能够指引我正确方向的人 :) 我正在寻找的命令是GROUP_CAT。在这里找到了它:http://www.mysqlperformanceblog.com/2006/09/04/group_concat-useful-group-by-extension/ - twerdster

0
另一个选项是使用array_reduce
$rows = array_from_sql_query();

$map = array_reduce($rows, function($res, $row) {
  $res[$row['name']][] = $row['language'];
  return $res;
}, []);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接