【问题标题】:Why there is an undefined offset in this array?为什么这个数组中有一个未定义的偏移量?
【发布时间】:2014-04-18 01:50:10
【问题描述】:

我想将一些数据存储在一个名为$temp 的数组中,但我收到一个错误,即存在未定义的偏移量。这是我的代码:

$temp    = array();
$terms   = $this->DocumentTerms();
$temp[0] = $terms[0][0];

for ($i = 0; $i < sizeof($terms); $i++) {

    $flag = true;

    for ($j = 0; $j < sizeof($terms[$i]); $j++) {

        for ($k = 0; $k < sizeof($temp) || $k < sizeof($terms[$i]); $k++) {

            if ($temp[$k] == $terms[$i][$j]) {

                $flag = false;
                break;
            }
        }

        if ($flag)
            array_push($temp, $terms[$i][$j]);
    }
}

未定义的偏移在这部分:

if($temp[$k] == $terms[$i][$j])

【问题讨论】:

  • 在哪一行?究竟是什么错误?
  • 顺便说一句,您选择使用sizeof()count() 有什么特别的原因吗?
  • @summea:sizeof()count() 的别名。它们完全一样。
  • @Jason OOO 查看更新。
  • @summea:啊,好吧。也许他们来自 C(++) 背景,但这只是猜测:-)

标签: php arrays offset


【解决方案1】:

这个条件:

$temp[$k] == $terms[$i][$j]

应该是:

isset($temp[$k]) && $temp[$k] == $terms[$i][$j]

在第二个循环结束之前,您不会将任何数据推送到$temp,但您会尝试在此条件下访问数组的$kth 索引。如果尚未设置,它将失败。检查以确保它已设置,然后继续查看它是否等于 $terms[$i][$j]

【讨论】:

  • array_key_exists($k,$temp)
  • 是的@JasonOOO,我通常把那个留给个人喜好。我猜array_key_exists() 更明显地说明了你想要做什么,但我喜欢使用isset() 来实现全面的一致性。您知道任何性能差异吗?
  • +1: 但我不会说func(condition) &amp;&amp; $var = $stuff; 是最好的写法。它有效,但我会使用三元运算符将其扩展为完整的语句。
  • 非常真实的@AmalMurali。我认为分解它最容易解释什么坏了以及它是如何修复的,所以我将保留我的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-05-04
  • 2016-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-11
相关资源
最近更新 更多