19

不知道为什么会这样:基本上,我有一个包含以下数组的数组,请参阅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++;
}

任何想法我做错了什么?我应该以另一种方式解决这个问题吗?

谢谢,

4

6 回答 6

11

您不需要未设置,而是使用内部数组的值覆盖外部参数,而不是整个数组。

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

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

于 2012-09-05T21:13:58.757 回答
9

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

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

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

于 2014-05-22T17:22:45.270 回答
2

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

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

于 2012-09-05T21:06:34.507 回答
1

错误在代码中。
分配后

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

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

于 2016-02-16T10:21:20.357 回答
1

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

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


这导致:

Fatal error:  Cannot unset string offsets in ... on line ...
于 2019-09-27T11:01:30.520 回答
0

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

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

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

于 2021-06-23T05:12:08.477 回答