【问题标题】:php integer increment throws memory errophp整数增量抛出内存错误
【发布时间】:2022-01-12 16:39:56
【问题描述】:

我面临一个奇怪的问题。我正在尝试创建一个自行填充的通用乘客列表。它决定性别、姓名和男性/女性。此外,如果要添加家庭成员。此列表有一个计数器 ($person),可与 for 函数配合使用。所以列表中的第一个人是 1,第二个人是 2,如果第三个人是第二个人的家庭成员,则 $person 整数得到 ++。但是,这个$person++ 会造成三分之二的内存问题,并且页面不会被加载;致命内存错误(致命错误:允许的内存大小为 536870912 字节已用尽(尝试分配 266338360 字节))

如何解决?

function insertPax($class, $pax, $nat) {

for($person = 1; ; $person++) {
    
    $fam       = 0;
    $first     = "";
    $first2    = "";

    $id        = array_rand($_SESSION['LAST'. $nat],1);
    $lastname  = $_SESSION['LAST'. $nat][$id];

    $gender    = rand(0,1);
    if($gender == 1) {
        $md    = array_rand($_SESSION['MALE'. $nat],1);
        $first = $_SESSION['MALE'. $nat][$md];
        $sec   = rand(1,8); if($sec == 1) { 
            $m2 = array_rand($_SESSION['MALE'. $nat],1); $first2 = $_SESSION['MALE'. $nat][$m2]; 
        }
        $gend  = "MALE"; $comp = "FEMALE"; $age = rand(18,80);
    } else {
        $fd    = array_rand($_SESSION['FEMALE'. $nat],1);
        $first = $_SESSION['FEMALE'. $nat][$fd];
        $sec   = rand(1,8); if($sec == 1) { 
            $f2 = array_rand($_SESSION['FEMALE'. $nat],1); $first2 = $_SESSION['FEMALE'. $nat][$f2]; 
        } 
        $gend  = "FEMALE"; $comp = "MALE"; $age = rand(17,80);
    }
    
    $fam       = rand(1,4);
    if($fam   == 1) {
        
        $ag2       = rand(17,80); 
        $cmp       = array_rand($_SESSION[$comp . $nat],1);
        $companion = $_SESSION[$comp . $nat][$cmp];
        
        $manf .= "<br /><span style='color:yellow;'>". $person ." : ". $lastname .", ". $first ." ". $first2 ." &nbsp; ". $gend ." [". $age ."]"; 
        
        # $person++; # <-- MEMORY ERROR
        
        $manf .= "<br />". $person ." : ". $lastname .", ". $companion ." &nbsp; ". $comp ." [". $ag2 ."]</span>"; 
                    
    } else {    
        
        $manf .= "<br />". $person ." : ". $lastname .", ". $first ." ". $first2 ." &nbsp; ". $gend ." [". $age ."]";
        
    }
    
    if($person == $pax) break;
    
}
    
return $manf;

}

【问题讨论】:

  • 这里的未知数太多了。我们不知道 $_SESSION 包含什么,以及它到底在做什么。如果您删除 $genderif($person == $pax) 之间的所有内容,那很好,所以它在里面。

标签: php for-loop integer


【解决方案1】:

您在 for 循环中增加 $person,也可能在第二个 if 条件中增加...但是您在中断比较中使用 ==,因此您引入了增加权利的可能性超过$pax 的值,缺少您的条件,并运行无限循环。我敢打赌你可以这样做:

if ($person >= $pax) break;

【讨论】:

  • 见鬼。发现得好。 :) 谢谢.. 我一直盯着这段代码这么久,.. 太久了。
猜你喜欢
  • 1970-01-01
  • 2018-06-20
  • 2014-02-23
  • 2014-10-13
  • 2013-09-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-01
相关资源
最近更新 更多