我在将一个对象分配给一个数组时遇到了一些麻烦,希望这是一个简单的错误,我疲惫的眼睛不见了。
采取以下代码
<?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(DirectoryIterator)#26(4){ [ “路径名”: “SplFileInfo”:私人] =&GT; string(35)“application / logs / log-2014-01-03.php” [ “文件名”: “SplFileInfo”:私人] =&GT; string(18)“log-2014-01-03.php” [ “水珠”: “DirectoryIterator”:私人] =&GT; 布尔(假) [ “subPathName”: “RecursiveDirectoryIterator”:私人] =&GT; string(0)“” }
编辑2:
认为[]分配的对象存在问题,因此我使用了array_push()
并给出了相同的结果。
还想到可能有一个问题是将对象分配给数组,所以我创建了一个新的简单类,并将它的两个对象添加到数组中。工作得很好。
答案 0 :(得分:2)
你能试试吗,
foreach (new DirectoryIterator($path) as $fileInfo) {
if($fileInfo->isDot()) continue;
// $newArray['filename'][] = $fileInfo->getFilename();
//$newArray['pathname'][] = $fileInfo->getPathname();
$newArray[] = &$fileInfo;
}
答案 1 :(得分:0)
怎么样:
<?php
$path = 'to/my/path';
$files = new DirectoryIterator($path);
foreach($files as $fileInfo) {
$newArray[] = $fileInfo;
}
print_r($newArray);
?>
答案 2 :(得分:0)
好的,感谢所有的帮助,但我终于找到了解决方案。从PHP 5开始,对象通过引用传递,而不是通过值传递。因此,为了将所有迭代添加到数组中,我首先需要clone
它们。
这是代码
<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
$newArray[] = clone $fileInfo;
}
所以@KrishR你很接近,只是走错了方向。
和参考:
再次感谢。