空数组括号分配不正确



我在将对象分配给数组时遇到了一些问题,希望这是一个简单的错误,我疲惫的眼睛缺失了。

取以下代码

<?php
$fruits = array('apple', 'banana', 'orange', 'grape');
foreach($fruits as $fruit){
$newArray[] = $fruit;
}
print_r($newArray);
?>

结果:

Array ( [0] => apple [1] => banana [2] => orange [3] => grape )

一切都好,这就是我想要的。现在我在DirectoryIterator中使用相同的基本逻辑

<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
$newArray[] = $fileInfo;
}
print_r($newArray);
?>

结果很奇怪。如果我执行count($newArray),它会返回我期望的文件数的正确值,但$newArray的每个值都是空的。

编辑:

如果我在foreach内var_dump($fileInfo),我会得到一个有效的对象。这里有一个例子。

object(DirectoryTerator)#26(4){["pathName":"SplFileInfo":private]=>string(35)"application/logs/log-2014-01-03.php"["fileName":"SplFileInfo":private]=>string(18)"log-2014-01-03.php"["glob":"DirectoryTerator":private]=>布尔(false)["subPathName":"RecursiveDirectoryTerator":private]=>字符串(0)"}

编辑2:

我想分配的[]可能有对象问题,所以我使用了array_push(),它给出了相同的结果。

我还认为可能在将对象分配给数组时出现了问题,所以我创建了一个新的简单类,并将其中的两个对象添加到数组中。效果很好。

你能试试这个吗,

foreach (new DirectoryIterator($path) as $fileInfo) {
if($fileInfo->isDot()) continue;
// $newArray['filename'][] = $fileInfo->getFilename();
//$newArray['pathname'][] = $fileInfo->getPathname();
$newArray[] = &$fileInfo;
}

怎么样:

<?php
$path = 'to/my/path';
$files = new DirectoryIterator($path);
foreach($files as $fileInfo) {
$newArray[] = $fileInfo;
}
print_r($newArray);
?>

好的,谢谢你的帮助,但我终于找到了解决方案。从PHP5开始,对象是通过引用传递的,而不是通过值传递的。因此,为了将所有迭代添加到数组中,我首先需要clone它们。

这是代码

<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
$newArray[] = clone $fileInfo;
}

所以@KrishR你很接近,只是走错了方向。

和一个参考:

如何在PHP 中将对象的副本推入数组

再次感谢。

最新更新