区块链技术博客
www.b2bchain.cn

PHP-嵌套的foreach循环中的异常行为 – php程序员分享

本文介绍了PHP-嵌套的foreach循环中的异常行为 – php程序员分享,有助于帮助完成毕业设计以及求职,是一篇很好的资料。

对技术面试,学习经验等有一些体会,在此分享。

一些背景

我有2个数组,其中包含以下信息:

$x = [     ['name' => 'Fred', 'ykey' => 'A', 'rank' => '1', 'VIP' => '1'],     ['name' => 'Fred', 'ykey' => 'B', 'rank' => '2', 'VIP' => '1'],     ['name' => 'Joe', 'ykey' => 'A', 'rank' => '1', 'VIP' => '1'],     ['name' => 'Joe', 'ykey' => 'B', 'rank' => '2', 'VIP' => '1'],     ['name' => 'Frank', 'ykey' => 'A', 'rank' => '1', 'VIP' => '0'],     ['name' => 'Frank', 'ykey' => 'B', 'rank' => '2', 'VIP' => '0'] ] 

$y = [     'A' => [         'hasVIPmember' => false,         'slots' = [] //X elements will be placed here     ]     'B' => [         'hasVIPmember' => false,         'slots' = [] //X elements will be placed here     ] 

目标是仅由一个VIP成员将$x中的每个元素放入$y中。我有一种方法来放置VIP成员,然后再一种方法来放置其他所有人。 $x中的信息是从数据库中获得的。 VIP中的’1’表示true

问题

我在下面的代码的注释中概述了我遇到的问题。

for($i = 1; $i <= 2; $i++){     foreach($x as $z){         //all Xs are seen here (after all iterations complete)         if($z['VIP'] == 1 && $z['rank'] == $i){             //Only Fred and Joe elements of X are shown here. (after all iterations complete)             if(!($y[$z['ykey']]['hasVIPmember'])){                 //Only 'Fred' elements are shown here. Why?(after all iterations complete)                 $y[$z['ykey']]['slots'][]= $z;                 $y[$z['ykey']]['hasVIPmember'] = true;             }         }     } } 

因此,问题是,正如您从注释中看到的那样,当我执行if(!($y[$z['ykey']]['hasVIPmember'])){...}时,我只会看到名称为“ Fred”的元素,因此,Fred放置在A和B中。

问题

为什么最终if语句中迭代的项目列表会进一步缩小?有什么办法可以纠正这种行为?

参考方案

当您运行迭代时,Fred在等级1和2上都是第一个。运行时,它会将Fred添加到$ y,然后跳过其余部分,因为此时$ y [hasVIPmember]为true。在使用某种计数器或密钥将Fred添加到任何$ y后,或者更改您的数据集之后,您需要找到一种方法使Fred从运行中无效。

$used = NULL; for($i = 1; $i <= 2; $i++){     foreach($x as $z){         //all Xs are seen here (after all iterations complete)         if($z['VIP'] == 1 && $z['rank'] == $i){             //Only Fred and Joe elements of X are shown here. (after all iterations complete)             if(!($y[$z['ykey']]['hasVIPmember'])){                 // looks for used                 if (!($z['name'] == $used)) {                     $y[$z['ykey']]['slots'][]= $z;                     $y[$z['ykey']]['hasVIPmember'] = true;                     $used = $z['name']; //add Fred to the used name list                 }              }         }     } } 

有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00&#0…

假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…

我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…

请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…

我在循环时有一个PHP,如果是最后一个循环,我想从,中删除​​最后一个逗号echo '],'; while($ltr = mysql_fetch_array($lt)){ echo '['; echo $ltr['days']. ' ,'. $ltr['name&#03…

赞(0) 打赏
部分文章转自网络,侵权联系删除b2bchain区块链学习技术社区 » PHP-嵌套的foreach循环中的异常行为 – php程序员分享
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

b2b链

联系我们联系我们