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

Jar*_*red 16 php multidimensional-array unset

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

array(2) { 
  [0]=> array(1) { 
    [0]=> string(3) "ivr" 
  } 
  [1]=> array(1) { 
    [0]=> string(9) "ivr_dests" 
  } 
}
Run Code Online (Sandbox Code Playgroud)

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

基本上,它应该返回:

array(2) {
  [0]=> string(3) "ivr"
  [1]=> string(9) "ivr_dests"
}
Run Code Online (Sandbox Code Playgroud)

所以这就是我设置的内容:

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++;
}
Run Code Online (Sandbox Code Playgroud)

我有什么想法我做错了吗?我应该另辟蹊径吗?

谢谢,

Tom*_*Tom 9

你不需要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);
Run Code Online (Sandbox Code Playgroud)

我认为你对foreach如何运作感到困惑.

foreach($array as $key => $value)
{
  echo $key;
  echo $value;
}
Run Code Online (Sandbox Code Playgroud)

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


Ste*_*ber 7

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

unset($search['param']['complete'])
Run Code Online (Sandbox Code Playgroud)

当$ search ['param']仍然是字符串而不是数组时,这会引发相同的错误.