当与 SplFixedArray 一起使用时,我发现 count( $arr, COUNT_RECURSIVE ) 有一些奇怪的行为.以这段代码为例...
$structure = new SplFixedArray( 10 );
for( $r = 0; $r < 10; $r++ )
{
$structure[ $r ] = new SplFixedArray( 10 );
for( $c = 0; $c < 10; $c++ )
{
$structure[ $r ][ $c ] = true;
}
}
echo count( $structure, COUNT_RECURSIVE );
结果...
> 10
您会期望结果为 110。这是正常行为是因为我嵌套了 SplFixedArray 对象吗?
最佳答案
SplFixedArray 实现了 Countable,但是 Countable 不允许参数,因此您不能递归计数。 The argument is ignored.您可以从 SplFixedArray::count 的方法签名中看到这一点和 Countable::count .
在 https://bugs.php.net/bug.php?id=58102 上有一个为此打开的功能请求
您可以继承 SplFixedArray 并使其实现 RecursiveIterator,然后重载 count 方法以使用 iterate_count 但是然后它将始终计算所有元素,例如它总是 COUNT_RECURSIVE 然后。不过也可以添加专用方法。
class MySplFixedArray extends SplFixedArray implements RecursiveIterator
{
public function count()
{
return iterator_count(
new RecursiveIteratorIterator(
$this,
RecursiveIteratorIterator::SELF_FIRST
)
);
}
public function getChildren()
{
return $this->current();
}
public function hasChildren()
{
return $this->current() instanceof MySplFixedArray;
}
}
关于PHP COUNT_RECURSIVE 和 SplFixedArray,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12284818/
.gitmodules:记录子模块信息在父项目新建submodule添加:gitsubmoduleadd 子模块仓库地址 子模块在父模块目录下的存储路径。注意:路径不能以/结尾(会造成修改不生效)、不能是现有工程已有的目录(不能順利Clone)删除:首先删除.gitmodules文件下的对应子模块信息,然后 gitrm–cached 克隆下来的项目有submodule拉取submodule: gitsubmoduleupdate--init--recursive更新submodulegitsubmoduleupdate--remote或者在submodule打开gitbash,然后用gitp
我在构建的这个jQuery幻灯片插件中遇到了一个奇怪的小困境。这没什么特别的,我迄今为止编写的代码运行良好,但我注意到,当我离开网站运行并切换到新选项卡并继续在另一个选项卡中浏览网页时(Mac版Chrome在我的例子中),当我返回我的站点时,setTimeout调用似乎已经加速,而不是等待计时器完成触发事件,而是连续触发。这是我的(简化)代码:vartimer;varcounter;varslides;//collectionofalltargetedslides.//animatetothenextslidefunctionnextSlide(){//stoptimermethods
出于学术目的,我正在尝试使用递归实现反向传播,但似乎我在某处出错了。已经修改它一段时间了,但要么根本没有学习到第二种模式,要么没有学习到第二种模式。请让我知道哪里出错了。(这是javascript语法)注意:在每个学习周期之前,错误都会重置为null。this.backpropagate=function(oAnn,aTargetOutput,nLearningRate){nLearningRate=nLearningRate||1;varoNode,n=0;for(sNodeIdinoAnn.getOutputGroup().getNodes()){oNode=oAnn.getOut
是否可以从对象字面量中递归调用方法?例如:(function(){'usestrict';varabc=['A','B','C'],obj={f:function(){if(abc.length){abc.shift();f();//Recursivecall}}};obj.f();}());错误:'f'在定义之前被使用。谢谢。 最佳答案 您可以通过使用命名函数表达式:f:functionmyself(){if(abc.length){abc.shift();myself();//Recursivecall}}必读:http://k
我有这个有效的TCP客户端代码。当它在TCP连接上写入或读取失败时,它会使用递归函数tcpReconnect()创建一个新连接。这安全吗?它会填满RAM吗?它可能会在几天(周末或节假日)后尝试重新连接。此代码是监视工业机器状态的驱动程序的一部分。也许这个问题有更好的解决方案。我找不到。PS:我不喜欢投票packagemainimport("fmt""net""time")varpollTime=1000//msvarhost="127.0.0.1"varport="11000"funcmain(){finished:=make(chanbool)goDriver()
如何在Windows上正确克隆--recursivegit存储库?我的git版本是:git--versiongitversion2.8.2当我使用此命令行使用--recursive克隆存储库时:gitclone--recursivehttps://github.com/evandrocoan/SublimeTextStudio.git"D:/User/Dropbox/Applications/SoftwareVersioning/SublimeText/Data/Packages"这是控制台输出:(一切正常,没有错误)D:\User\Dropbox\Applications\Softw
我正在尝试在我的Windows7机器上安装httperf,为此我需要遵循以下命令:Grabthelatest,greatesttarballfile(asofthiswriting,it’s0.8),sutoroot,mvthefileto/usr/local/bin,andrunthecommands:tarxvzfhttperf-0.8.tar.gzcdhttperf-0.8./configuremakemakeinstall要完成所有这些,我必须安装MinGW。不幸的是,当我开始“制作”时,在这种情况下,当我运行“mingw32-make”时,我收到以下错误:$mingw32-m
语言:JavaScript递归-不是我最喜欢的主题。Promises-它们可能会让人感到困惑。递归+Promises-我需要在软垫房间里编程。我做了这个小JSFiddle拼图,我称之为TheRecursiveFunHouse作为通过将问题简化为愚蠢的事情来保持我理智的喜剧方式。希望你们能从我的痛苦中得到欢笑:)问题:每个递归调用都依赖于前一个调用的结果,但为了获得结果,我必须运行一个异步任务并在其他子任务中使用该结果。“递归Playground”帮助我将问题归结为这一点-由于子任务仍在执行,原始递归循环继续使用未定义的值。TheFunHouse-循环收集介于(-99)和99之间的随机数
$array1=['1'=>'11','b'=>1,3=>33,8=>8];$array2=['1'=>'22','b'=>2,3=>44,9=>9];$merged=array_merge_recursive($array1,$array2);结果是:array(7){[0]=>string(2)"11"["b"]=>array(2){[0]=>int(1)[1]=>int(2)}[1]=>int(33)[2]=>int(8)[3]=>string(2)"22"[4]=>int(44)[5]=>int(9)}让我们看一眼:唯一的部分是'b'键,它们实际上是有效的。我不想覆盖它的任何内
array_walk_recursive($arr,function(&$val,$key){if($val=='smth'){unset($val);//我不希望它为空,我希望元素完全脱离数组。这甚至可以通过array_walk_recursive实现吗? 最佳答案 您不能在此处使用array_walk_recursive,但您可以编写自己的函数。很简单:functionarray_unset_recursive(&$array,$remove){$remove=(array)$remove;foreach($arrayas$ke