多维数组键/值

时间:2014-02-17 14:48:02

标签: php arrays multidimensional-array

我在正确获取内部数组键/值对时遇到问题。我有外部数组正确但内部数组只有索引号作为键而不是我设置键我想要的。似乎我错过了内部阵列形成的一个步骤,但我不确定它是什么......

我现在的代码:

<?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
        )
 )

1 个答案:

答案 0 :(得分: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]);