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()
,谢谢!