2012-09-05 14 views
12

सुनिश्चित नहीं हैं कि क्यों यह हो रहा है: मूल रूप से, मैं एक सरणी है जो निम्न सरणियों शामिल है, var_dump देखें:घातक त्रुटि: स्ट्रिंग ऑफसेट त्रुटि को अनसेट नहीं कर सकता है?

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

जाहिर है इस डेटा प्रकार के अनावश्यक है, लेकिन यह क्या xpath साथ मूल्यों में हो रही है, जबकि वापस आ गया था है। तो मैं पहले array() के माध्यम से लूप करने के लिए foreach कर रहा हूं और पहले सरणी में इसके नेस्टेड सरणी मान असाइन कर रहा हूं।

असल में, यह इस लौटना चाहिए:

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($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']) 

यह वही त्रुटि $ खोज [ 'परम'] अभी भी एक सरणी के स्ट्रिंग बजाय था फेंक दिया।

1

त्रुटि कोड में है।
के बाद आप असाइन

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

$arr2[$key] स्ट्रिंग "ivr" हो जाता है और $arr2[$key][0] श्रृंखला का पहला चरित्र है और सेट नहीं