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

Php 致命错误:无法取消设置字符串偏移量错误?,php,multidimensional-array,unset,Php,Multidimensional Array,Unset,不确定发生这种情况的原因:基本上,我有一个包含以下数组的数组,请参见var\u dump: array(2) { [0]=> array(1) { [0]=> string(3) "ivr" } [1]=> array(1) { [0]=> string(9) "ivr_dests" } } 显然,这些数据有点冗余,但这是使用xpath获取值时返回的数据。因此,我正在执行一个foreach循环遍历第一个array(),并在第

不确定发生这种情况的原因:基本上,我有一个包含以下数组的数组,请参见
var\u 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++;
}
知道我做错了什么吗?我应该换一种方式吗


谢谢,

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


您不需要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;
}

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

我在稍微不同的情况下出现此错误,这可能会证明是有用的

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

当$search['param']仍然是字符串而不是数组时,这引发了相同的错误。错误在代码中。
分配完后

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

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

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

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

这导致:

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

这是有道理的。我困惑的一部分是我之前取消设置了一个数组,但我现在意识到我正在创建一个新数组并取消设置旧数组,而不是像本例中那样覆盖一个数组。您的示例也帮助我理解了
foreach()
,谢谢!