当前位置: 首页 > 知识库问答 >
问题:

为什么我的数组变量在循环中填充时是空的?[副本]

东门胤
2023-03-14
$crawler = new Crawler($xml);

$parkList = []; 

$crawler->filter('wfs|FeatureCollection > gml|featureMember > bm|ST_PARK_P > bm|NOM')->each(function (Crawler $actualPark, $i) {
        $parkList[$i] = [];
        $parkList[$i][] = $actualPark->text();
        //var_dump($parkList); // $parklist variable is filled
});

$crawler->filter('wfs|FeatureCollection > gml|featureMember > bm|ST_PARK_P > bm|geometry > gml|Point > gml|pos')->each(function (Crawler $actualPark, $i) {
        $parkList[$i][] = explode(' ', $actualPark->text())[0];
});
$crawler->filter('wfs|FeatureCollection > gml|featureMember > bm|ST_PARK_P > bm|geometry > gml|Point > gml|pos')->each(function (Crawler $actualPark, $i) {
        $parkList[$i][] = explode(' ', $actualPark->text())[1];
});


return $parkList; //parklist variable is strangely empty

为什么我的parkList变量在.each函数外是空的,而我在循环外声明了它并在循环期间填充了它的值...并且循环成功执行?

共有1个答案

裴经义
2023-03-14

您正在使用一个闭包,因此需要使用use方法...函数(Crawler$actualPark,$I)使用($parklist)

$crawler = new Crawler($xml);

$parkList = []; 

$crawler->filter('wfs|FeatureCollection > gml|featureMember > bm|ST_PARK_P > bm|NOM')->each(function (Crawler $actualPark, $i) use ($parkList) {
        $parkList[$i] = [];
        $parkList[$i][] = $actualPark->text();
        //var_dump($parkList); // $parklist variable is filled
});

//var_dump($parkList); // $parklist variable will now be filled
 类似资料:
  • 我有两个填充数组[Int]的实现,如下所述。第一个以84毫秒的速度执行,第二个以100倍的速度执行: 为什么第二个变种需要100倍以上的时间?它不是GC,因为我可以删除第一次执行,同时删除第二次执行。我使用Scala 3在Java 11上运行它: 更重要的是,如果你打开implementation,您将通过while。。。 PS:我在Scala 2.12上重复这个测试: 所以Scala 3的问题.

  • 在我使用的一个类中,他们给出了一个用循环编辑数组内容的示例。 类示例: 我的代码: 我尝试运行语句,但没有成功。我联系了他们的“现场帮助”,但他们没有什么帮助。谁能告诉我我在这里没有看到什么吗?

  • 我可以打印最大罚款,但我不能打印计数。我看不出max和count之间的区别,也看不出为什么它不让我打印count。感谢任何帮助

  • 问题内容: 假设我有一个包含while循环的线程,而我想“从外部”停止它。 这是主类: 它似乎正在正确停止,但是我已经读过布尔值也应该是易变的。为什么?会加快停车速度吗? 问题答案: 当并发线程将缓存运行变量时,这意味着它将在线程工作内存中缓存。 Java中的volatile关键字用作Java编译器和Thread的指示符,它们不缓存此变量的值,而始终从主内存中读取它。因此,如果您希望共享实现中读写

  • 在一篇博客文章“PHP Internals:When does foreach copy”中,NikiC指出在下面这样的代码中:

  • 在我的程序中,我发现当为时,循环无法正确退出。它看起来像整数溢出,远远大于10,循环不会停止。请告诉我发生了什么,以及如何在大型项目中避免这个错误。 代码链接