2012-09-05 36 views
12

不知道這是爲什麼發生的:基本上,我有一個包含以下數組的數組,見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++; 
} 

任何想法我做錯了嗎?我是否應該用另一種方式去做?

感謝,

回答

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 => $value,你必須$key => $arr2。因此,當您有$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]是字符串的第一個字符,無法取消設置

相關問題