致命错误:无法取消设置字符串偏移错误?

时间:2012-09-05 21:01:19

标签: php multidimensional-array unset

不确定为什么会发生这种情况:基本上,我有一个包含以下数组的数组,请参阅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++;
}

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

谢谢,

6 个答案:

答案 0 :(得分:8)

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

$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;
}

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

答案 1 :(得分:6)

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

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

当$ search ['param']仍然是字符串而不是数组时,会出现同样的错误。

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

错误在代码中 分配后

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

$arr2[$key]成为字符串"ivr"$arr2[$key][0]是字符串的第一个字符,无法取消设置

答案 4 :(得分:0)

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

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


 这会导致:

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

答案 5 :(得分:0)

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

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

如果你尝试unset($fruits['a]['apple'];,你会遇到这个错误。正确用法unset($fruits['a];