एक साहचर्य सरणी में एक आइटम जोड़ना


90
//go through each question
foreach($file_data as $value) {
   //separate the string by pipes and place in variables
   list($category, $question) = explode('|', $value);

   //place in assoc array
   $data = array($category => $question);
   print_r($data);

}

यह काम नहीं कर रहा है क्योंकि यह डेटा के मूल्य को बदल देता है। हालांकि मेरे पास प्रत्येक लूप में एक सहयोगी मूल्य कैसे हो सकता है? $file_dataडेटा का एक सरणी है जिसका एक गतिशील आकार है।

जवाबों:


98

मुझे लगता है कि आप चाहते हैं $data[$category] = $question;

या यदि आप एक ऐसा सरणी चाहते हैं, जो श्रेणियों को प्रश्नों की श्रेणी में रखता है:

$data = array();
foreach($file_data as $value) {
    list($category, $question) = explode('|', $value, 2);

    if(!isset($data[$category])) {
        $data[$category] = array();
    }
    $data[$category][] = $question;
}
print_r($data);

9
अन्य प्रोग्रामर टाइपो के लिए आपसे नफरत करेंगे, हालांकि वे उन्हें भी करने के लिए मजबूर होंगे, या उन्हें ठीक करेंगे।
ThiefMaster

मैं array_push के साथ बहुत सहज था, मूल बातें भूल गया! वास्तव में मददगार!
CLOUGH

122

आप बस यह कर सकते हैं

$data += array($category => $question);

यदि आपका php 5.4+ पर चल रहा है

$data += [$category => $question];

9
यह एक साहचर्य सरणी में आइटम जोड़ने का सही उत्तर है।
andreszs

7
कई तत्व जोड़ें, भी: $ data + = ['x' => 1, 'y' => 2];
विभाजित 19

यदि आप सरणी के अंदर एक से अधिक वस्तुओं के साथ समाप्त नहीं करना चाहते हैं तो यह तरीका है
DragonFire

ध्यान दें: यह काम कर सकता है यदि आपका सरणी पहले से ही एक ही कुंजी के साथ तत्व नहीं रखता है, तो यह एक मौजूदा तत्व को अधिलेखित नहीं कर सकता है।
मोहम्मद हमउदय

29

पाश के लिए पहले:

$data = array();

फिर अपने पाश में:

$data[] = array($catagory => $question);

2
यदि आप इसे इस तरह से करते हैं तो $ डेटा = सरणी () का उपयोग करके पहले सरणी को भूल जाना नहीं है; या php एक नोटिस फेंक देगा
एलेक्स बैली

मुझे लगता है कि एसओ मेरे जवाब को कैश कर देता है, जैसा कि मैंने पोस्ट किया था, मैंने महसूस किया कि मैंने इसे अपने कोड में इनिशियलाइज़ नहीं किया। इसलिए मैंने इसे जोड़ा और मैंने आपकी टिप्पणी को बाद में देखा, धन्यवाद :-)
मो

4
यह काम नहीं किया क्योंकि यह सरणी के अंदर एक सरणी बना दिया। क्षमा करें यदि आपके माध्यम से मेरा सवाल थोड़े है।
फिल

PHP 5.4+ आप थोड़ा कम कोड लिख सकते हैं:$data=[]; $data[] = [$category => $question];
जस्टिन

$res = array(); $res[] = array('foo' => $bar); $foo = $res['foo'];अनिर्धारित सूचकांक के साथ विफल रहता है : फू इन .. , लेकिन नीचे सुझाए गए प्लस साइन काम करता है।
21

7

मुझे पता है कि यह एक पुराना सवाल है लेकिन आप इसका उपयोग कर सकते हैं:

array_push($data, array($category => $question));

यह arrayआपके वर्तमान के अंत में धकेल देगा array। या यदि आप अपने सरणी के अंत में एकल मान जोड़ने का प्रयास कर रहे हैं, तो अधिक सरणियाँ नहीं तो आप इसका उपयोग कर सकते हैं:

array_push($data,$question);

6

किसी को भी जिसे 2d साहचर्य सरणी में जोड़ने की आवश्यकता है, आप ऊपर दिए गए उत्तर का भी उपयोग कर सकते हैं, और इस तरह कोड का उपयोग कर सकते हैं

 $data[$category]["test"] = $question

तब आप इसे कॉल कर सकते हैं (परिणाम का परीक्षण करने के लिए:

echo $data[$category]["test"];

जिसे $ प्रश्न छापना चाहिए

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.