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

2022-08-30 21:09:03

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

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

显然,这些数据是多余的,但它是在使用 xpath 获取值时返回的。因此,我正在执行一个循环访问第一个数组,并在第一个数组中分配其嵌套数组值。foreacharray()

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

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

任何想法我做错了什么?我应该以另一种方式进行吗?

谢谢


答案 1

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

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


答案 2

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

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

当$search['param']仍然是一个字符串而不是数组时,这引发了同样的错误。


推荐