web-dev-qa-db-ja.com

致命的なエラー:文字列オフセットの設定を解除できませんか?

これが発生している理由がわかりません。基本的に、次の配列を含む配列があります。_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++;
}
_

私が間違っていることはありますか?私はこれを別の方法で進めるべきですか?

おかげで、

16
Jared

設定を解除する必要はありません。配列全体ではなく、内側の配列の値で外側のパラメーターを上書きしています。

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

配列内の各キー/値ペアのキーと値を表示します。

9
Tom

このエラーはわずかに異なる状況で発生しましたが、役立つ可能性があります。

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

$ search ['param']がarrayではなくstringである場合、これは同じエラーをスローしました。

8
Steve Tauber

foreachの構文が間違っていると思います... $key => $valueがある場所は$key => $arr2である必要があります。したがって、$arr2[$key]がある場合、ネストされた配列$keyで要素$arr2を探しています。 $arr2は、$keyによって参照されます。これは、文字列(連想配列の場合)または整数(非連想配列の場合)です。 $arr2は、$arr[$key]からも参照できます。

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

2
taz

エラーはコードにあります。
割り当てた後

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

$arr2[$key]は文字列"ivr"になり、$arr2[$key][0]は文字列の最初の文字であり、設定解除できません

1
Enzo Apollonio

これは、文字列値を設定解除しようとしたときに発生します-以下の場合、文字列である配列の最初の要素にアクセスし、設定を解除しようとすると、このエラーが発生します。

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


これは〜をひき起こす:

Fatal error:  Cannot unset string offsets in ... on line ...
0
user2275693