gpt4 book ai didi

PHP - 嵌套 foreach 循环中的意外行为

转载 作者:行者123 更新时间:2023-12-02 23:41:50 25 4
gpt4 key购买 nike

一些背景

我有 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 成员(member)将 $x 中的每个元素放入 $y 中。我有一种方法来放置 VIP 成员(member),然后另一种方法来放置其他人。 $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。您需要找到一种方法,通过使用某种计数器或 key ,在将 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 - 嵌套 foreach 循环中的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32404507/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com