【问题标题】:Fatal error: Cannot unset string offsets error?致命错误:无法取消设置字符串偏移错误?
【发布时间】:2012-08-30 15:52:29
【问题描述】:

不知道为什么会这样:基本上,我有一个包含以下数组的数组,请参阅var_dump

array(2) { 
  [0]=> array(1) { 
    [0]=> string(3) "ivr" 
  } 
  [1]=> array(1) { 
    [0]=> string(9) "ivr_dests" 
  } 
}

显然,这些数据有点多余,但它是使用 xpath 获取值时返回的数据。所以我正在做一个foreach 循环遍历第一个array() 并在第一个数组中分配它的嵌套数组值。

基本上,它应该返回这个:

array(2) {
  [0]=> string(3) "ivr"
  [1]=> string(9) "ivr_dests"
}

这就是我的设置:

foreach($arr as $key => $arr2){
    $arr2[$key] = $arr2[$key][0];
    unset($arr2[$key][0]); //This returns Fatal error: Cannot unset string offsets
//if I comment out the unset(), $arr[$key] returns the same value as it did (multidim array)
};

        //I tried this too:
$i=0;
foreach($arr as $arr2){
  $arr2[$i] = $arr2[$i][0];
  $i++;
}

任何想法我做错了什么?我应该换一种方式吗?

谢谢,

【问题讨论】:

    标签: php multidimensional-array unset


    【解决方案1】:

    你不需要取消设置,你用内部数组的值覆盖外部参数,而不是整个数组。

    $a1 = array("ivr");
    $a2 = array("ivr2");
    
    $a3 = array($a1, $a2);
    
    foreach($a3 as $key => $value){
        $a3[$key] = $a3[$key][0];
        //unset($arr2[$key][0]);
    };
    
    var_dump($a3);
    

    我认为您对 foreach 的工作方式感到困惑。

    foreach($array as $key => $value)
    {
      echo $key;
      echo $value;
    }
    

    将显示数组中每个键/值对的键和值。

    【讨论】:

    • 这是有道理的。我的部分困惑是我之前取消了一个数组,但我现在意识到我正在创建一个新数组并取消设置旧数组,而不是像这个例子那样覆盖一个。你的例子也帮助我理解foreach(),谢谢!
    【解决方案2】:

    我在稍微不同的情况下遇到了这个错误,这可能很有用。

    unset($search['param']['complete'])
    

    当 $search['param'] 仍然是 string 而不是 array 时,这会引发相同的错误。

    【讨论】:

      【解决方案3】:

      我相信你有 foreach 的语法错误......它应该是 $key => $value 你有 $key => $arr2。因此,当您拥有$arr2[$key] 时,您正在寻找嵌套数组$arr2 中的元素$key$arr2$key 引用,它可以是字符串(对于关联数组)或整数(对于非关联数组)。 $arr2 也可以被 $arr[$key] 引用。

      http://php.net/manual/en/control-structures.foreach.php

      【讨论】:

        【解决方案4】:

        错误在代码中。
        分配后

        $arr2[$key] = $arr2[$key][0];
        

        $arr2[$key]变成字符串"ivr"$arr2[$key][0]是字符串的第一个字符,不能取消设置

        【讨论】:

          【解决方案5】:

          当您尝试取消设置字符串值时会发生这种情况 - 在以下情况下,您访问数组中的第一个字符串元素并尝试取消设置会导致此错误

          $a=array("hello", "there");
          unset($a[0][0]);
          


          这会导致:

          Fatal error:  Cannot unset string offsets in ... on line ...
          

          【讨论】:

            【解决方案6】:

            是的,只使用数组键来取消设置,而不是它的值。示例:

            $fruits = ['a' => 'apple', 'b' => 'orange', 'c' => 'banana'];

            如果您尝试unset($fruits['a]['apple'];,您将面临此错误。正确用法unset($fruits['a];

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-06-08
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多