不确定为什么会发生这种情况:基本上,我有一个包含以下数组的数组,请参阅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++;
}
任何想法我做错了什么?我应该采取另一种方式吗?
谢谢,
答案 0 :(得分:8)
你不需要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;
}
将显示数组中每个键/值对的键和值。
答案 1 :(得分:6)
我在稍微不同的情况下遇到了这个错误,可能会有用。
unset($search['param']['complete'])
当$ search ['param']仍然是字符串而不是数组时,会出现同样的错误。
答案 2 :(得分:2)
我相信你有foreach
错误的语法...它应该是$key => $value
,你有$key => $arr2
。因此,当您拥有$arr2[$key]
时,您正在寻找嵌套数组$key
中的元素$arr2
。 $arr2
引用$key
,它是字符串(对于关联数组)或整数(对于非关联数组)。 $arr2
也可以引用$arr[$key]
。
答案 3 :(得分:1)
错误在代码中 分配后
$arr2[$key] = $arr2[$key][0];
$arr2[$key]
成为字符串"ivr"
,$arr2[$key][0]
是字符串的第一个字符,无法取消设置
答案 4 :(得分:0)
当您尝试取消设置字符串值时会发生这种情况-在以下情况下,您访问数组中的第一个元素(即字符串),然后尝试取消设置它导致此错误
$a=array("hello", "there");
unset($a[0][0]);
这会导致:
Fatal error: Cannot unset string offsets in ... on line ...
答案 5 :(得分:0)
是的,只使用数组键来取消设置,而不是它的值。示例:
$fruits = ['a' => 'apple', 'b' => 'orange', 'c' => 'banana'];
如果你尝试unset($fruits['a]['apple'];
,你会遇到这个错误。正确用法unset($fruits['a];