2012-01-17 23 views
13

द्वारा दिया मुझे यकीन है कि अगर यह संभव हो सकता है नहीं कर रहा हूँ, लेकिन मैं इसे कैसे करना है अगर यह होता है को समझ नहीं सकता ...हो रही तत्व समारोह

मैं एक विशिष्ट तत्व बाहर प्राप्त करना चाहते हैं एक सरणी है कि पहले यह एक सरणी ... इस तरह में गुजर बिना, एक समारोह से वापस आ रहा है ...

$item = getSomeArray()[1]; 


function getSomeArray(){ 
    $ret = Array(); 
    $ret[0] = 0; 
    $ret[1] = 100; 
    return $ret; 
} 

क्या इस के लिए सही सिंटैक्स है की?

+1

[पहुँच सरणी php में एक समारोह से वापस लौटे] (http के संभावित डुप्लिकेट: 4 जोड़ा गया है सरणी अपसंदर्भन, यहाँ PHP के सरणी प्रलेखन से उदाहरण है: //stackoverflow.com/questions/1459377/access-array-returned-by-a-function-in-php) – outis

+0

http://stackoverflow.com/a/35601314/2035600 – shan

उत्तर

15

PHP यह अभी तक नहीं कर सकता है, यह एक प्रसिद्ध सीमा है। आपको सोचने का हर अधिकार है "क्या तुम मुझसे मजाक कर रहे हो?"। माफ़ कीजिये।

आप एक E_STRICT चेतावनी आप हमेशा reset और end क्रमशः के साथ एक सरणी के पहले और अंतिम तत्व बाहर खींच सकते हैं पैदा करने पर आपत्ति नहीं है - इसका मतलब है कि आप भी बाहर खींच सकते हैं array_slice बाद से किसी भी तत्व व्यवस्था कर सकते हैं जिसके लिए आप पहले या आखिरी रहना चाहते हैं, लेकिन शायद यह चीजें बहुत दूर ले रहा है।

लेकिन निराशा नहीं: (इस समय आगामी) PHP 5.4 रिलीज में इस सुविधा को शामिल किया जाएगा (नाम array dereferencing के तहत)।

अद्यतन: मैंने अभी एक और तकनीक के बारे में सोचा जो काम करेगा। शायद यह अच्छा कारण है कि मैंने कभी इसका इस्तेमाल नहीं किया है या इसे इस्तेमाल किया है, लेकिन तकनीकी रूप से यह काम करता है।

// To pull out Nth item of array: 
list($item) = array_slice(getSomeArray(), N - 1, 1); 
+0

वाह ... कितना विचित्र ... ठीक है ... कोई चिंता नहीं ... मैं इसे एक अस्थायी धारक सरणी के माध्यम से पास कर दूंगा। बहुत बहुत धन्यवाद। –

2

हां, php ऐसा नहीं कर सकता है। चमगादड़ तुम इतनी तरह ArrayObect उपयोग कर सकते हैं,:

$item = getSomeArray()->{1}; 
// Credits for curly braces for Bracketworks  

function getSomeArray(){ 
    $ret = Array(); 
    $ret[0] = 0; 
    $ret[1] = 100; 
    return new ArrayObject($ret, ArrayObject::ARRAY_AS_PROPS); 
} 

ठीक है, हो सकता है संख्यात्मक कुंजी के साथ काम नहीं कर रहा है, लेकिन मुझे यकीन नहीं कर रहा हूँ।

+2

वह एक घातक उठाएगा; आपको 'getSomeArray() -> {1};' किसी भी गैर-अनुपालन संपत्ति नामों के लिए घुंघराले ब्रेसिज़ का उपयोग करने की आवश्यकता है; [SimpleXML] देखें (http://www.php.net/manual/en/simplexml.examples-basic.php) संबंधित जानकारी के लिए मूल उपयोग। – Dan

0

दूसरों के रूप में कहते हैं, वहाँ यह करने के लिए कोई सीधा रास्ता है, मैं आम तौर पर सिर्फ इसलिए की तरह एक चर के लिए असाइन करें:

$items = getSomeArray(); 
$item = $items[1]; 


function getSomeArray(){ 
    $ret = Array(); 
    $ret[0] = 0; 
    $ret[1] = 100; 
    return $ret; 
} 
0

मैं काफी हद तक निश्चित है कि PHP में क्या करना संभव नहीं है हूँ। इससे पहले कि आप तत्वों तक पहुंच सकें या सीधे किसी अन्य फ़ंक्शन में इसका उपयोग कर सकें, लौटाए गए सरणी को किसी अन्य सरणी में असाइन करना होगा जो लौटाए गए सरणी के बावजूद पुनरावृत्त होगा (यानी var_dump (getSomeArray()))।

2

जिस वाक्यविन्यास का आप उल्लेख कर रहे हैं उसे फ़ंक्शन सरणी डेरफ़्रेंसिंग के रूप में जाना जाता है। यह अभी तक लागू नहीं हुआ है और RFC for it है।

आम तौर पर स्वीकृत वाक्यविन्यास फ़ंक्शन के रिटर्न वैल्यू को सरणी में असाइन करना है और $array[1] सिंटैक्स के साथ उस मान को एक्सेस करना है।

उस ने कहा, हालांकि आप अपने कार्य के लिए तर्क के रूप में इच्छित कुंजी भी पारित कर सकते हैं।

function getSomeArray($key = null) { 
    $array = array(
    0 => "cheddar", 
    1 => "wensleydale" 
); 

    return is_null($key) ? $array : isset($array[$key]) ? $array[$key] : false;  
} 

echo getSomeArray(0); // only key 0 
echo getSomeArray(); // entire array 
1

मैं जानता हूँ कि यह एक पुराने सवाल है, लेकिन, अपने उदाहरण में, आप भी array_pop() का उपयोग सरणी के अंतिम तत्व प्राप्त करने के लिए कर सकता है, (या array_shift() पहले प्राप्त करने के लिए)।

<?php 
$item = array_pop(getSomeArray()); 


function getSomeArray(){ 
    $ret = Array(); 
    $ret[0] = 0; 
    $ret[1] = 100; 
    return $ret; 
} 
+0

धन्यवाद ... यह मेरे इरादे पर नहीं था, हालांकि मैं 2 आइटमों की एक सरणी के साथ देख सकता हूं कि इसे किस तरह से गलत समझा जा सकता है। मैं यह पता लगाने की कोशिश कर रहा था कि फ़ंक्शन द्वारा सीधे सरणी तत्वों को कैसे प्राप्त किया जाए। मैंने बाद में PHP को विशाल स्टीमिंग टर्ड के रूप में छोड़ दिया है और यह वापस नहीं देखा है। हालांकि धन्यवाद! :) –

2

PHP 5।

उदाहरण # 7 सरणी अपसंदर्भन

function getArray() { 
    return ['a', 'b', 'c']; 
} 

// PHP 5.4 
$secondElement = getArray()[0]; // output = a 

// Previously 
$tmp = getArray(); 
$secondElement = $tmp[0]; // output = a 
संबंधित मुद्दे