繁体   English   中英

在foreach循环中总会得到一个空数组

[英]Always get an empty array in foreach loop

数据库表“系统”中有两列。 我有systemId并想获取mobileSystemId 但是我已经定义为global的变量$mobileSystemId始终为空。

编辑:现在array_map不起作用。 我总是得到我的异常输出“ Arrayfehler ArrayMap”,我有以下代码:

$mobileSystemIds=array();

function getMobileSystemId($systemId)
    {
        global $mysqli;
        global $mobileSystemIds;
        $query="SELECT mobileSystemId FROM system WHERE systemId ='" .$systemId ."'";
        if(!$result=$mysqli->query($query))
        {
            echo "Datenbankfehler DB-QUery";
            exit(0);
        }
        if (!$mobileSystemId=$result->fetch_assoc())
        {
            echo "Datenbankfehler DB-Fetch";
            exit(0);
        }
        $mobileSystemId=$mobileSystemId["mobileSystemId"];
        echo "mobile System ID: " .$mobileSystemId ."<br />";
        return $mobileSystemId; 
    }   

    if(!$mobileSystemIds=array_map("getMobileSystemId",$systemList))
    {
        echo "Arrayfehler ArrayMap";
    }

在这种情况下,在函数中使用return会更简洁。 与您的问题无关,但是您的$systemId var是否受信任? (以防止SQL注入)。

更新:

if(!$mobileSystemIds=array_map("getMobileSystemId",$systemList))
{
    echo "Arrayfehler ArrayMap";
}

应该阅读(经过检查;对我有用):

$mobileSystemIds = array_map('getMobileSystemId', $systemsList);
if (empty($mobileSystemIds))
{
    if (empty($systemsList) || !(is_array($systemsList)))
        echo "OK: no mobile IDs, but no systems either";
    else
        echo "THIS now is strange :-(";
}
else
{
    echo "Alles OK";
    var_dump($mobileSystemIds);
}

我通过基于输入返回一个虚拟值来进行尝试; 如果对您不起作用,则数据库中一定有一些奇怪的东西。

(更新:以下文本是您的原始代码,未使用数组映射)

您的代码应该按原样工作。 您将多个$mobileSystemId放入单个$mobileSystemId

它的工作原理:我用一个更简单的代码进行了测试,删除了数据库调用,但保留了您的代码和拼写,没有任何改动。

因此,该错误必须在其他地方。 我猜想此代码将包含在其他内容中,并且:

  • $mobileSystemIds = array(); 声明多次执行,从而丢失其所有数据;
  • $mobileSystemIds = array(); 声明本身包含在更局部的范围内 ,您可以从外部读取它,读取一个空值或完全不同的值。

尝试将代码的第一部分替换为:

GLOBAL $mobileSystemsIds;
if (defined($mobileSystemsIds))
    trigger_error("mobileSystemsId defined more than once", E_USER_ERROR);
else
    $mobileSystemsIds = array();

并且,在函数主体中:

if (!defined($mobileSystemsId))
    trigger_error("mobileSystemsId should have been defined", E_USER_ERROR);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM