2011-12-04 9 views
26

उदाहरण:किसी भी तरह से सहयोगी सरणी के साथ नवीनतम आगामी PHP काम में सूची() सूचीबद्ध कर सकते हैं?

के ऊपर
list($fruit1, $fruit2) = array('apples', 'oranges'); 

कोड पाठ्यक्रम ठीक काम करता है, लेकिन नीचे कोड:

list($fruit1, $fruit2) = array('fruit1' => 'apples', 'fruit2' => 'oranges'); 

देता है: Notice: Undefined offset: 1 in....

वहाँ किसी भी तरह से किसी भी तरह list('fruit1' : $fruit1) तरह की सूची के साथ नामित किया गया कुंजी का उल्लेख करने के है , क्या आपने भविष्य में रिलीज के लिए इस तरह की योजना बनाई है?

उत्तर

39

extract() फ़ंक्शन का प्रयास करें। यह आपके सभी चाबियों का चर, उनके संबद्ध मूल्यों करने के लिए सौंपा पैदा करेगा:

<?php 

    $fruits = array('fruit1'=> 'apples','fruit2'=>'oranges'); 

    foreach ($fruits as $key => $value) 
    { 
     $$key = $value; 
    } 
    echo $fruit1; //=apples 

?> 
+1

हाँ, यह काम करता है। दूसरी तरफ, 'निकालने' का उपयोग करते समय उपसर्ग की आपूर्ति करने के लिए लगभग हमेशा अच्छा अभ्यास होता है जबतक कि आप 100% बिल्कुल निश्चित नहीं हैं कि कुंजी मौजूद होगी। – lonesomeday

+1

हां, मैं इसे पहले से अपेक्षित कुंजी के साथ array_intersect_key() के साथ चलाऊंगा। – landons

+0

लेकिन यह आपके काम नहीं करेगा यदि आपके पास 'getimagesize() 'से मिलता है। – Jurik

-4
<?php 

function array_list($array) 
{ 
    foreach($array as $key => $value) 
    $GLOBALS[$key] = $value; 
} 

$array = array('fruit2'=>'apples','fruit1'=>'oranges'); 

array_list($array); 

echo $fruit1; // oranges 


?> 
+4

यह मूल रूप से ['निकालने'] (http://php.net/extract) करता है। –

-2

इस एक सुरुचिपूर्ण समाधान पर विचार?

<?php 
    list($fruit1, $fruit2) = array_values(array('fruit1'=>'apples','fruit2'=>'oranges')); 
?> 
+2

क्षमा करें, लेकिन वास्तविकता परिवर्तनीय चर लगभग कभी "सुरुचिपूर्ण" समाधान नहीं हैं। – Kzqai

+0

तो निकालने का उपयोग क्यों नहीं करें()? यह मूल रूप से करता है जो आप समाधान कर रहे हैं –

34

के बारे में array_values ​​का उपयोग कर() क्या:

extract(array('fruit1' => 'apples', 'fruit2' => 'oranges')); 
var_dump($fruit1); 
var_dump($fruit2); 
+0

यह विधि बेहतर है (फिर स्वीकार किया गया जवाब) यदि आप कुछ कुंजियां – machineaddict

+3

छोड़ना चाहते हैं तो यह काम नहीं करता है अगर सरणी में मान विपरीत क्रम में हैं, जैसे 'array ('fruit2' => 'सेब', 'fruit1' => 'संतरे') '। 'Fruit2' का मान $ fruit1 और इसके विपरीत असाइन किया गया है। – jonasfh

1

यह लागू करने के लिए बहुत सरल है।

function orderedValuesArray(array &$associativeArray, array $keys, $missingKeyDefault = null) 
{ 
    $result = []; 
    foreach ($keys as &$key) { 
     if (!array_key_exists($key, $associativeArray)) { 
      $result[] = $missingKeyDefault; 
     } else { 
      $result[] = $associativeArray[$key]; 
     } 
    } 
    return $result; 
} 
$arr = [ 
    'a' => 1, 
    'b' => 2, 
    'c' => 3 
]; 
list($a, $b, $c) = orderedValuesArray($arr, ['a','AAA', 'c', 'b']); 
echo $a, ', ', $b, ', ', $c, PHP_EOL; 

उत्पादन: उपयोग तरफ 1, , 3

  • कम लिखकर
  • कोई तत्व निर्भरता के आदेश (array_values के विपरीत) चर नाम पर
  • प्रत्यक्ष नियंत्रण (extract के विपरीत) - छोटे नाम टक्कर जोखिम, बेहतर आईडीई समर्थन
1

यदि आप मेरे मामले में हैं:

सूची() केवल संख्यात्मक सरणी पर काम करता है। तो यदि आप कर सकते हैं, fetch() या fetchAll() में रिक्त छोड़कर -> इसमें 2 विकल्प हैं: संख्यात्मक सरणी और सहयोगी सरणी। यह काम करेगा।

9

PHP 7.1 के साथ;

$array = ['fruit1' => 'apple', 'fruit2' => 'orange']; 

// [] style 
['fruit1' => $fruit1, 'fruit2' => $fruit2] = $array; 

// list() style 
list('fruit1' => $fruit1, 'fruit2' => $fruit2) = $array; 

print $fruit1; // apple 
संबंधित मुद्दे