我在正确获取内部数组键/值对时遇到问题。我的外部数组是正确的,但内部数组只有索引号作为键,而不是我将键设置为我想要的。似乎我缺少形成内部数组的一个步骤,但我不确定它是什么。
我现在的代码:
$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
)
)
这里有两个问题。首先,您没有执行任何将基于字符串的索引分配给内部数组的操作。
其次,即使您是,这些索引也会由于您使用 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]);