2014-02-17 136 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