2012-09-05 10 views
12

ないのはなぜこれが起こっていることを確認:基本的に、私は次の配列を含む配列を持って、var_dumpを参照してください。致命的なエラー:文字列オフセットのエラーを解除できませんか?

array(2) { 
    [0]=> array(1) { 
    [0]=> string(3) "ivr" 
    } 
    [1]=> array(1) { 
    [0]=> string(9) "ivr_dests" 
    } 
} 

明らかに、このデータは冗長のようなものですが、それは、XPathを使用して値を取得中に返されたものです。だから私はforeach最初のarray()をループし、その配列のネストされた配列の値を最初の配列に代入します。基本的に、それはこの返す必要があります

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

私が間違ってやっている任意のアイデア:だからここ

array(2) { 
    [0]=> string(3) "ivr" 
    [1]=> string(9) "ivr_dests" 
} 

は、私がセットアップしました何ですか?私は別の方法でこれを行うべきですか?

おかげで、

答えて

7

あなたは、全体の配列とは対照的に、あなたは、内側の配列の値を持つ外側のパラメータを上書きされ、設定を解除する必要はありません。

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

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

+0

設定を解除することはできません。私の混乱の一部は、以前は配列を設定していないことでしたが、今は新しい配列を作成していて、古い配列を設定していて、この例のように上書きしていないことに気付きました。あなたは私が 'foreach()'の意味を理解する助けになります。ありがとう! – Jared

2

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

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

6

私は、このエラーがわずかに異なる状況で発生していることが判明しました。

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

この

は$検索[ 'paramは'] 配列文字列代わりにまだあった同じエラーを投げました。

1

エラーはコードです。
はあなたが割り当てた後

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

$arr2[$key]は、文字列"ivr"なり、$arr2[$key][0]は、文字列の最初の文字であると理にかなって

関連する問題