2014-02-17 133 views
0

我遇到了正確獲取內部數組鍵/值對的問題。我有外部數組是正確的,但內部數組只有索引號作爲鍵,而不是我設置我想要的關鍵。好像我在想念在內部陣列的形成了一步,但林不知道它是什麼...多維數組鍵/值

我當前的代碼現在:

<?php 

$path = './downloads/Current/v5.5/'; 
$blacklist = array('orig55205Web', 'SQL Files', '.', '..'); 

foreach (new DirectoryIterator($path) as $folder) { 
    if($folder->isDot() || in_array($folder, $blacklist)) continue; 

    if($folder->isDir()) { 
     $item = $folder->getFilename(); 
     $versions[$item] = array(); 

     if ($handle = opendir($path . $item)) { 
      while (false !== ($file = readdir($handle))) { 
       if (!in_array($file, $blacklist)) { 
        array_push($versions[$item], $file); 
       } 
       asort($versions[$item]); 
       $versions[$item] = array_values($versions[$item]); 
      } 
     } 
     closedir($handle); 
    } 
} 
ksort($versions); 
print_r($versions); 
?> 

我的輸出看起來像這樣目前:

Array 
(
    [55106Web] => Array 
     (
      [0] => 55106.txt 
      [1] => ClientSetup.exe 
      [2] => ClientSetup32.exe 
      [3] => Setup.exe 
      [4] => Setup32.exe 
     ) 

    [55122Web] => Array 
     (
      [0] => 55122.txt 
      [1] => ClientSetup.exe 
      [2] => ClientSetup32.exe 
      [3] => Setup.exe 
      [4] => Setup32.exe 
     ) 
) 

什麼,我希望它輸出:

Array 
(
    [55106Web] => Array 
     (
      [Version] => 55106.txt 
      [CS64] => ClientSetup.exe 
      [CS32] => ClientSetup32.exe 
      [S64] => Setup.exe 
      [S32] => Setup32.exe 
     ) 

    [55122Web] => Array 
     (
      [Version] => 55122.txt 
      [CS64] => ClientSetup.exe 
      [CS32] => ClientSetup32.exe 
      [S64] => Setup.exe 
      [S32] => Setup32.exe 
     ) 
) 
+0

你可以顯示你想要的輸出是什麼嗎? –

+0

對不起,帕特里克Q,忘了輸出件 – user616

+0

刪除'array_values()'調用 – hindmost

回答

1

這裏有兩個問題。首先,你沒有做任何將基於字符串的索引賦值給內部數組的東西。

其次,即使你是,這些指標將被作爲您使用的array_values的結果從文檔array_values() returns all the values from the array and indexes the array numerically.

所以,你應該分配指標(見下文),並刪除調用array_values刪除。

這可能不完全適合您的需求100%,但應該讓你朝着正確的方向前進。

$indexesArray = array("Version", "CS64", "CS32", "S64", "S32"); 
$i = 0; 
while (false !== ($file = readdir($handle))) { 
    if (!in_array($file, $blacklist)) { 
     $versions[$item][$indexesArray[$i]] = $file; 
     $i++ 
    } 
} 
asort($versions[$item]); 
+0

這並不能解決我的問題,能夠命名鍵。而不是數字鍵我想要的名稱是關鍵的東西 – user616

+0

@ user1784477「我希望名稱的關鍵是特定的東西」所以添加到您的代碼。現在,沒有任何內容試圖指定索引。即你在哪裏獲得'版本','CS64','CS32'等?你在哪裏試圖將這些指定爲索引? –

+0

現在'版本等..'值將硬編碼,但即時通訊假設我需要在這一步中設置索引名稱? 'array_push($ versions [$ item],$ file);' – user616