Php 空数组括号未正确赋值
我在将对象分配到数组时遇到了一些问题,希望这是一个简单的错误,我的眼睛疲劳了 以下面的代码为例Php 空数组括号未正确赋值,php,arrays,file,Php,Arrays,File,我在将对象分配到数组时遇到了一些问题,希望这是一个简单的错误,我的眼睛疲劳了 以下面的代码为例 <?php $fruits = array('apple', 'banana', 'orange', 'grape'); foreach($fruits as $fruit){ $newArray[] = $fruit; } print_r($newArray); ?> 很好,这就是我想要的。现在,我将这一基本逻辑用于directoryinterator <?php $pa
<?php
$fruits = array('apple', 'banana', 'orange', 'grape');
foreach($fruits as $fruit){
$newArray[] = $fruit;
}
print_r($newArray);
?>
很好,这就是我想要的。现在,我将这一基本逻辑用于directoryinterator
<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
$newArray[] = $fileInfo;
}
print_r($newArray);
?>
结果很奇怪。如果我进行计数($newArray)
它将返回预期文件数的正确值,但是$newArray
的每个值都是空的
编辑:
如果我var\u dump($fileInfo)
在foreach中,我会得到一个有效的对象。这里有一个例子
对象(DirectoryIterator)#26(4){
[“路径名”:“SplFileInfo”:private]=>
字符串(35)“application/logs/log-2014-01-03.php”
[“fileName”:“SplFileInfo”:private]=>
字符串(18)“log-2014-01-03.php”
[“glob”:“DirectoryIterator”:private]=>
布尔(假)
[“子路径名”:“RecursiveDirectoryIterator”:private]=>
字符串(0)”
}
编辑2:
我想可能[]分配的对象有问题,所以我使用了array\u push()
,它给出了相同的结果
还认为可能在为数组分配对象时存在问题,所以我创建了一个新的简单类,并将其中的两个对象添加到数组中。那很好。那么:
<?php
$path = 'to/my/path';
$files = new DirectoryIterator($path);
foreach($files as $fileInfo) {
$newArray[] = $fileInfo;
}
print_r($newArray);
?>
你能试试这个吗
foreach (new DirectoryIterator($path) as $fileInfo) {
if($fileInfo->isDot()) continue;
// $newArray['filename'][] = $fileInfo->getFilename();
//$newArray['pathname'][] = $fileInfo->getPathname();
$newArray[] = &$fileInfo;
}
好的,谢谢你的帮助,但我终于找到了解决办法。从PHP5开始,对象是通过引用传递的,而不是通过值传递的。因此,为了将所有迭代添加到数组中,我首先需要克隆它们 这是密码
<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
$newArray[] = clone $fileInfo;
}
directoryinterator内置于PHPvar\u dump($fileInfo)代码>在foreach中检查这个输出?我检查过了,每个都是有效的对象为什么不使用@Prasanth呢?这是另一种剥猫皮的方法glob
可以,但它只返回文件名。我也只能返回带有directoryinterator
的文件名,但我对该对象提供的一些额外信息感兴趣。另外,我想知道为什么这不起作用,我认为这可能是一些奇怪的怪癖,所以我尝试了这个,但现在幸运的是,如果我只使用字符串值就可以了。似乎在将对象分配给arraypassing by reference时遇到了一些问题,但没有做任何事情。
<?php
$path = 'to/my/path';
foreach(new DirectoryIterator($path) as $fileInfo) {
$newArray[] = clone $fileInfo;
}