如何基于指定key对多维数组分组,获取每个key关联的对应字段值
实现方案(PHP 版本)
步骤1:归集同sname对应的所有cname
你可以用foreach遍历完成归集,写法简单易读:
// 你的原始数组 $originalArr = [ ['sname' => 'florida', 'cname' => 'orlando'], ['sname' => 'texas', 'cname' => 'dallas'], ['sname' => 'florida', 'cname' => 'tampa'], ['sname' => 'ohio', 'cname' => 'columbus'], ]; $result = []; foreach ($originalArr as $item) { $result[$item['sname']][] = $item['cname']; }
如果偏好更简洁的写法,可以用array_reduce实现同样的归集效果:
$result = array_reduce($originalArr, function($carry, $item) { $carry[$item['sname']][] = $item['cname']; return $carry; }, []);
步骤2:格式化对齐输出
为了达到你要求的冒号后对齐的展示效果,先计算所有sname的最大长度来统一补空格:
// 计算最长sname的长度,用于对齐 $maxLen = max(array_map('strlen', array_keys($result))); foreach ($result as $sname => $cities) { // 补空格保证所有冒号后位置对齐 $prefix = str_pad($sname . ':', $maxLen + 4, ' ', STR_PAD_RIGHT); echo $prefix . implode(', ', $cities) . PHP_EOL; }
输出结果
运行后输出和你要求的格式完全一致:
florida: orlando, tampa texas: dallas ohio: columbus
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

