2017-01-06 10 views
-2

PHPラボ連想配列を次の反復型varにマージするには?手元

groupByOwnersがその機能を実装:

は各ファイル名のファイルの所有者名を含む連想配列を受け取り。 各所有者名のファイル名の配列を任意の順序で含む連想配列を返します。

例えば、連想配列["Input.txt" => "Randy", "Code.py" => "Stan", "Output.txt" => "Randy"] the groupByOwners function should return ["Randy" => ["Input.txt", "Output.txt"], "Stan" => ["Code.py"]]の場合。

私はかなり完成しました.2番目のファイル所有者の行を拡張する方法を理解するとともに、array_merge()を使用して問題が発生しました。

は、ここに私のコードです:

<?php 
class FileOwners { 
    public static function groupByOwners($files) { 
     $i = 0; 
     $totalOwners=0; 
     $lastOwners[0] = 0; 
     $ownerFiles = array(); 
     //input associative array. 
     foreach ($files as $file => $currentOwner) { 
      //echo $currentOwner.':'.$file;  

      // if the last owner checked matches the current, do not backup the owner name. 
      if ($currentOwner == $lastOwners[$i]) { 
       //subtract count of how many owners are found by 1. 
       $totalOwners=$totalOwners-1; 
      } else { 
       //Backup the the new owner found. 
       $namesOfOwners[$i]=$currentOwner; 
      }; 
      $i++;  
      $totalOwners++;//count total owners. 
      $lastOwners[$i] = $currentOwner; 
     } 
     $i=0; 
     $fileCount=0; 
     // for all owners found (2) test case 
     foreach ($namesOfOwners as $ownerName) { 
      //match there own files to there respective arrays, in the order of 0-? 
      foreach ($files as $file => $currentOwner) { 
       // if file is matching the current owner and, 
       if ($ownerName == $currentOwner) { 
        echo $file.$ownerName; 
        $ownerFiles[$ownerName] = $file;     
       } 
      } 
      $i++; 
     } 
     return print_r($ownerFiles); 
    } 
} 

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

そして、問題領域はここです。あなたは上記読めば

foreach ($files as $file => $currentOwner) { 
       // if file is matching the current owner and, 
       if ($ownerName == $currentOwner) { 
        echo $file.$ownerName; 
        $ownerFiles[$ownerName] = $file;     
       } 
} 

、問題は、私は、私は私の出力をしたいと思うが、それは、配列のみをサポートしている文字列で連想配列をマージするarray_merge()を使用しようとしているということであるとして:

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

私は自分のために実験室を行っています教育的利益。 groupByOwnersの

1)Returnステートメント()関数:

+0

する必要がありますStackOverflowのへようこそ。 [help]にアクセスして[ask]を読んでください。 「自分のコードを私のために修正してください」と思われる質問は、何がうまくいかないかについてほとんど説明しておらず、あなたがしたことは一般的に下落して話題になってしまいます。 –

答えて

0

は、私はあなたが書いたコードには2つの問題がある参照してください。 print_r()はブール値を返しますので、var_dump()は決して必要な配列を出力しません。

return print_r($ownerFiles); 

return $ownerFiles; 

2)あなたが指摘して問題に言及したものでなければなりません。代わりに値を更新する、$ownerFiles[$ownerName]配列に$file変数を挿入します -

$ownerFiles[$ownerName] = $file;  

$ownerFiles[$ownerName][] = $file;  
+0

私はxDの戻り値を認識していますが、これはテストのためのものでしたが、感謝しています...それを試してみると、array_push()も見つかってしまいました。 – c0ldtrain

+0

うまく動作してくれました。驚いたことに、助けてくれてありがとうございました。連想配列のそのタイプのエントリでは、どこでも参照を見つけることができませんでした。 – c0ldtrain

関連する問題