翻转关联数组并防止因新键冲突而丢失新值[重复]

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

我有一个像这样的数组:

$files = array(
    "Input.txt" => "Randy",
    "Code.py" => "Stan",
    "Output.txt" => "Randy"
);

我想按文件所有者对文件进行分组并像这样返回:

[
    "Randy" => ["Input.txt", "Output.txt"], 
    "Stan" => ["Code.py"]
]

我尝试这样做:

<?php 
class FileOwners 
{
   public static function groupByOwners($files)
   {
       foreach ($files as $file => $owner){
          $data[$owner] = $file;
       };
       return $data;
   }
}
$files = array(
    "Input.txt" => "Randy",
    "Code.py" => "Stan",
    "Output.txt" => "Randy"
);
var_dump(FileOwners::groupByOwners($files));

但是我得到的是这样的:

array(2) {
    ["Randy"]=>string(10) "Output.txt",
    ["Stan"]=>string(7) "Code.py"
}

请帮忙如何制作。

php arrays grouping associative-array array-flip
2个回答
6
投票

您要覆盖 $data,请使用

$data[$owner][] = $file;
而不是
$data[$owner]= $file;

public static function groupByOwners($files)
   {
       foreach ($files as $file => $owner){
          $data[$owner][] = $file;
       };
       return $data;
   }

2
投票

只需创建一个多维数组

[]

foreach ($files as $file => $owner){
      $data[$owner][] = $file; // [] will store values as an array inside the key
} // Remove semicolon from here
© www.soinside.com 2019 - 2024. All rights reserved.