PHP 数组作为没有数组的索引

PHP Array as index without array

我有一个 PHP 脚本,它工作得很好,除了我收到此错误消息

Undefined index: Array in [...]/exp.php on line 239

这一行有这段代码:

$out_kostenstelle = $kostenstellen[$nextShift["kostenstelle"]][1].
    "(".$nextShift["kostenstelle"].")";

我认为唯一可以将数组作为索引出现的部分是 $nextShift["kostenstelle"]$kostenstellen 的索引的部分。

然而,当我尝试使用这段代码捕捉这部分(它处于一个有数百次运行的循环中,所以我无法手动检查它)时,我的脚本从未进入 if 子句中的部分

if(is_array($nextShift["kostenstelle"]))
{
    echo "<pre>";
    var_dump($nextShift);
    echo "</pre>";
    die();
}

这对我来说没有任何意义,我尝试了很多东西。没有成功。

我认为这可能是错误所在的代码,但为了以防万一这里有 $kostenstellen$nextShift

的结构

Kostenstellen:

array(2) {
  [100]=>
  array(2) {
    [0]=>
    string(3) "100"
    [1]=>
    string(11) "Company A"
  }
  [200]=>
  array(2) {
    [0]=>
    string(3) "300"
    [1]=>
    string(12) "Company B"
  }
}

和 nextShift:

array(4) {
  ["id"]=>
  string(2) "168"
  ["start_unix"]=>
  string(10) "1466780000"
  ["end_unix"]=>
  string(10) "1466812400"
  ["kostenstelle"]=>
  string(3) "100"
}

没有办法解决:问题是您尝试使用的索引本身就是一个数组。

当您访问 php 中的数组时,如果它不是字符串或数字,$array[$index]、PHP 将尝试对其进行字符串化。字符串化数组给出文字 "Array";就像你在这里一样。

但是,还有另一种可能性:当你运行你的循环时,数组已经被字符串化了。这意味着之前某个地方,有人将它转换为字符串。

你可以用这样的 if 检查是否:

if(is_array($nextShift["kostenstelle"]) || $nextShift["kostenstelle"] == "Array")
{
    echo "<pre>";
    var_dump($nextShift);
    echo "</pre>";
    die();
}