空数组括号无法正确分配

时间:2014-01-12 06:32:14

标签: php arrays file

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

采取以下代码

<?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()并给出了相同的结果。

还想到可能有一个问题是将对象分配给数组,所以我创建了一个新的简单类,并将它的两个对象添加到数组中。工作得很好。

3 个答案:

答案 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你很接近,只是走错了方向。

和参考:

How to push a copy of an object into array in PHP

再次感谢。