一些背景
我有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
}
}
}
}
}
PHP strtotime困境 - php有人可以解释为什么这在我的服务器上输出为true吗?date_default_timezone_set('Europe/Bucharest'); var_dump( strtotime('29.03.2015 03:00', time()) === strtotime('29.03.2015 04:00…
PHP-全局变量的性能和内存问题 - php假设情况:我在php中运行一个复杂的站点,并且我使用了很多全局变量。我可以将变量存储在现有的全局范围内,例如$_REQUEST['userInfo'],$_REQUEST['foo']和$_REQUEST['bar']等,然后将许多不同的内容放入请求范围内(这将是适当的用法,因为这些数据指的是要求自…
php-casperjs获取内部文本 - php我正在为casperjs使用php包装器-https://github.com/alwex/php-casperjs我正在网上自动化一些重复的工作,我需要访问一个项目的innerText,但是我尚不清楚如何从casperjs浏览器访问dom。我认为在js中我会var arr = document.querySelector('label.input…
PHP:对数组排序 - php请如何排序以下数组Array ( 'ben' => 1.0, 'ken' => 2.0, 'sam' => 1.5 ) 至Array ( 'ken' => 2.0, 'sam' => 1.5, 'ben' =&…
PHP-从最后一个循环中删除逗号 - php我在循环时有一个PHP,如果是最后一个循环,我想从,中删除最后一个逗号echo '],'; while($ltr = mysql_fetch_array($lt)){ echo '['; echo $ltr['days']. ' ,'. $ltr['name…