Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 检查forreach循环中变量值的变化_Php_Loops_Foreach - Fatal编程技术网

Php 检查forreach循环中变量值的变化

Php 检查forreach循环中变量值的变化,php,loops,foreach,Php,Loops,Foreach,因此,我有一个复选框,用于发送到PHP脚本。当然,基本上,我的复选框会创建一个数组。看到它是那些$var[]之一 基本上,我的数组在代码中如下所示: $vars = array('12345:0','45678:0','78910:0','3434:1','2345:1'); foreach ($vars as $var) { $vinfo = explode(":", $var); $vgroup = $vinfo[0]; $vacct = $vinfo[1];

因此,我有一个复选框,用于发送到PHP脚本。当然,基本上,我的复选框会创建一个数组。看到它是那些
$var[]
之一

基本上,我的数组在代码中如下所示:

$vars = array('12345:0','45678:0','78910:0','3434:1','2345:1');

foreach ($vars as $var) {
    $vinfo = explode(":", $var);
    $vgroup = $vinfo[0];
    $vacct = $vinfo[1];

    // Various function calls with those variables. 
}
现在,正如你所看到的。我要分钱买vinfo和vaccount。在我的来源。我有两个帐户(在本例中)。有些组属于0,有些组属于1。我想运行函数
switchAccount(“详细信息”)
每当foreach循环中的
$vacct
变量发生变化时。在这种情况下,它应该只切换一次(默认情况下为0)

“帐户”(
$vacct
)开关根据复选框中的用户输入而变化。但是(通常)总是上升一个数字。同样,这取决于管理员输入

试试这个

$vars = array('12345:0','45678:0','78910:0','3434:1','2345:1');
$vacct = '';
foreach ($vars as $var)
{
    $vinfo = explode(":", $var);
    $vgroup = $vinfo[0];

    if($vacct != $vinfo[1])
    {
        switchAccount("details");
        $vacct = $vinfo[1];

    }
}

我已将您的
foreach
替换为正常的
for
,以便您可以获得“上一次”迭代的信息。这样,您可以检查
$vacct
中是否有更改

for($i = 0; $i < count($vars); $i++){
    $vinfo = explode(":", $vars[$i]);
    $vgroup = $vinfo[0];
    $vacct = $vinfo[1];

    if($i > 0){ //Make sure we don't get a -1 index
        $previous = $vars[$i - 1]; //Get previous info
        $previous_info = explode(':', $previous);
        $previous_vacct = $previous_info[1];

        if($previous_vacct != $vacct){
            //Do switching function
        }
    }
}
for($i=0;$i0){//请确保我们没有得到-1索引
$previous=$vars[$i-1];//获取以前的信息
$previous_info=分解(“:”,$previous);
$previous_vacct=$previous_info[1];
如果($previous_vacct!=$vacct){
//Do开关功能
}
}
}

如果唯一变量为0或1,则该选项有效。有时高达100。我只放了有限的一部分。但是,如果从0切换到另一个值,这会起作用。但这种转变可能不止于此。它可以从1切换一段时间,然后从2切换一段时间,以此类推。@user1687621
$vacct
在不再等于当前数字时会使用新数字进行更新,因此它应该继续超过0和1。你试过了吗?是的,@Bono完全同意你的看法。@user1687621它总是更新$vacct,只要它发现$vacct中的前一个值不等于当前值(即$vinfo[1])。@AnkurTiwari是的,我已经测试了你和我自己的答案,两者都工作得很好。该代码似乎有缺陷。因为即使在vacct变量没有改变的情况下,它也会尝试进行帐户切换。@user1687621您试过运行这些代码段吗?我的代码输出(在
$vars
数组中添加
12356:3
1
3
一次@AnkurTiwari的代码输出
0
1
3
一次。所以这里的两个答案都是经过测试的,都是有效的。什么对你不起作用,因为这应该起作用。