स्ट्रिंग PHP के लिए ऐरे?


282

PHP सरणी को स्ट्रिंग में बदलने के लिए सबसे अच्छी विधि क्या है?
मेरे पास वैरिएबल है $typeजो एक प्रकार की एक सरणी है।

$type = $_POST[type];

मैं इसे अपने डेटाबेस में एक स्ट्रिंग के रूप में संग्रहीत करना चाहता हूं, जिसके साथ प्रत्येक प्रविष्टि अलग हो |:

खेल | त्योहारों | अन्य


24
कृपया डेटाबेस में क्रमबद्ध मान सम्मिलित करने से बचें। यहाँ क्यों है: stackoverflow.com/questions/7364803/…
NullUserException

14
@NullUserException Ex_ఠ मैं सहमत हूं कि DB में क्रमबद्ध मान डालने से आँखें बिल्कुल जल जाती हैं, लेकिन आप उसकी स्थिति को नहीं जानते हैं - यह बहुत अच्छी तरह से वारंटेड है।
एंग्रीहैकर

4
मुझे लगता है कि इस सवाल को फिर से खोलना चाहिए। यह शुरुआती लोगों के लिए उपयोगी सवाल है और मुझे नहीं लगता कि यह कोई विषय है।
सादबकर

1
क्या होगा अगर सरणी में कुछ मानों में वर्ण हैं |
सुमित

फिर आप उन पात्रों से बच सकते हैं। इसे यहाँ पढ़ें php.net/manual/en/regexp.reference.escape.php
फॉर्च्यूनसोलर

जवाबों:


352

बस इम्पोड का उपयोग करें

implode("|",$type);

13
यह तब तक अच्छा है जब तक कि आपके पास नेस्टेड एरेस न हो - जो तब हो सकता है $_POSTजब आप सरणी-नाम प्रपत्र इनपुट का उपयोग कर रहे हों।
लेथ

नेस्टेड सरणियों के साथ बस एक फोरचेक का उपयोग करें यह काम करेगा।
गहरे

224

आप json_encode () का उपयोग कर सकते हैं

<?php
$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);

echo json_encode($arr);
?>

बाद में बस अपने DB से स्ट्रिंग को डीकोड करने के लिए json_decode () का उपयोग करें। और कुछ भी बेकार है, JSON बाद के उपयोग के लिए सरणी संबंध बरकरार रखता है!


40
" और कुछ भी बेकार है " ... शायद डेटा को सामान्य करने के अलावा।
डैन लुग

5
मेरे ऊपर Rofl @ टिप्पणी। जैसा कि आप कहते हैं, कंबल बयान लगभग हमेशा, अनहेल्दी हैं।
हारून कोल

12
मुझे खुशी है कि आप लोग मनोरंजन कर रहे हैं :)
जकब

16
"व्यापक सामान्यीकरण, साथ ही निरपेक्षताएं हमेशा गलत होती हैं। हमेशा।" ;)
ओली

मुझे पसंद है कि यह एक चाबी रखता है। यह बाद के उपयोग के लिए बहुत उपयोगी है।
अपोलोक्सिक

45
json_encode($data) //converts an array to JSON string
json_decode($jsonString) //converts json string to php array

क्यों JSON: आप इसे अधिकांश प्रोग्रामिंग भाषाओं के साथ उपयोग कर सकते हैं, serialize () फ़ंक्शन द्वारा बनाई गई स्ट्रिंग PHP में केवल पठनीय है, और आप अपने डेटाबेस में विशेष रूप से ऐसी चीजों को स्टोर करना पसंद नहीं करेंगे यदि डेटाबेस में लिखे गए अनुप्रयोगों के बीच साझा किया जाता है विभिन्न प्रोग्रामिंग भाषाओं


1
JFI ने मेरे उपयोग में $ डेटा = json_decode ($ jsonString, true)
टर्मिनल

दूसरा तर्क वैकल्पिक है, अधिकांश मामले में यह बिना काम करता है।
सुमित

यह एकल या बहु आयाम सरणियों के लिए उत्कृष्ट काम करता है और मेरी राय में यह स्वीकृत उत्तर होना चाहिए। दूसरे पैरामीटर के रूप में सही जोड़ने पर भी विचार करें।
कम्बाइन

36

नहीं, आप इसे अपने डेटाबेस में एकल स्ट्रिंग के रूप में संग्रहीत नहीं करना चाहते हैं।

आप उपयोग कर सकते हैं serialize()लेकिन यह आपके डेटा को खोज करने के लिए कठिन, साथ काम करने और अंतरिक्ष को बर्बाद करने के लिए कठिन बना देगा।

आप कुछ अन्य एन्कोडिंग भी कर सकते हैं, लेकिन यह आमतौर पर एक ही समस्या से ग्रस्त है।

आपके पास एक डीबी होने का पूरा कारण यह है कि आप इस तरह से तुच्छ काम कर सकते हैं। आपको सरणियों को संग्रहीत करने के लिए तालिका की आवश्यकता नहीं है, आपको एक तालिका की आवश्यकता है जिसे आप एक सरणी के रूप में दर्शा सकते हैं।

उदाहरण:

id | word
1  | Sports
2  | Festivals
3  | Classes
4  | Other

आप एसक्यूएल के साथ तालिका से डेटा का चयन करेंगे, इसके बजाय एक तालिका है जो दिखता है:

id | word
1  | Sports|Festivals|Classes|Other

ऐसा नहीं है कि कोई किसी रिलेशनल डेटाबेस में स्कीमा कैसे डिजाइन करता है, यह इसके उद्देश्य को पूरी तरह से हरा देता है।


2
यकीन है कि यह है, तुम न से बचने के लिए है!
क्रिस जी।

2
@MarcB यह एन्कोडिंग बेवकूफ-प्रूफ, मानक, कम बग के लिए प्रवण बनाता है, और आसानी से एक सरणी में वापस निर्यात करने योग्य है। क्या उसे दूसरी तालिका का उपयोग करना चाहिए? शायद। क्या यह सब कह रहा है कि प्रत्यारोपण से बेहतर है? पूर्ण रूप से।
गुप्तकालीन

6
इस प्रश्न का सही उत्तर होगा: RDBMS में क्रमबद्ध मान न डालें। यह इस तरह की बात है कि रैप्टर को बुलाना चाहिए ।
NullUserException

1
@timdev: कुछ स्थितियों में json- बचना SQL एस्केपिंग के अनुरूप हो सकता है, लेकिन इस पर निर्भर करता है कि यह आपको अंत में जला देगा। JSON बैकस्लैश का उपयोग करता है - क्या होगा यदि आप एक डीबी पर हैं जो बैकस्लैश को नहीं पहचानता है और भागने के लिए दोगुना-उद्धरण का उपयोग करता है? जैसे ''बजाय \'?
मार्क बी

1
जबकि मैं यहां व्यक्त सिद्धांत से सहमत हूं (सामान्य रूप अच्छे हैं, DB से संरचना का उपयोग करना अच्छा है, डुह), कोई भी उत्तर जो "नहीं, आप नहीं चाहते ..." के साथ शुरू होता है, मेरे सिर में घंटी सेट करता है। आपके पास प्रश्नकर्ता के प्रश्न का पूरा संदर्भ नहीं है, और इसे मानें या नहीं, उनके पास इस विशेष डेटा को निरूपित करने और इसे एक ही क्षेत्र में संग्रहीत करने का एक उत्कृष्ट कारण हो सकता है । नहीं, आप सर्वज्ञ नहीं हैं; आप नहीं जानते कि पूछने वाला क्या चाहता है। कृपया कमेंट में अपनी राय रखें , जवाब नहीं ।
सिस्टम PAUSE

35

सबसे अच्छे तरीके में से एक:

echo print_r($array, true);

10
कृपया अपने उत्तर के बारे में विस्तार से बताएं कि यह समस्या को कैसे हल करता है
हमारे आदमी केले में

1
आप इसका उपयोग भी कर सकते हैं: "print_r ($ array, false);", क्योंकि यह बिना किसी मान को वापस किए सरणी को प्रिंट करेगा। अगर सच दिया जाता है, तो print_r () पर प्रिंट नहीं होगा और वह केवल स्ट्रिंग लौटाएगा। More at: php.net/manual/en/function.print-r.php
गैरेट

यह सबसे अच्छा होना चाहिए क्योंकि json_decodeगड़बड़ के कारण प्रारूप गड़बड़ हो जाता है।
अमीना नूरैनी

14

निहित () :

<?php
$string = implode('|',$types);

हालांकि, इनकॉग्निटो सही है, आप शायद इसे इस तरह से स्टोर नहीं करना चाहते हैं - यह आपके डेटाबेस की रिलेशनल पावर की कुल बर्बादी है।

यदि आप क्रमांकन पर मृत हैं, तो आप json_encode () का उपयोग करने पर भी विचार कर सकते हैं



11

यह एक कुंजी और मूल्य बचाता है

function array2string($data){
    $log_a = "";
    foreach ($data as $key => $value) {
        if(is_array($value))    $log_a .= "[".$key."] => (". array2string($value). ") \n";
        else                    $log_a .= "[".$key."] => ".$value."\n";
    }
    return $log_a;
}

आशा है कि यह किसी की मदद करता है।


6
$data = array("asdcasdc","35353","asdca353sdc","sadcasdc","sadcasdc","asdcsdcsad");

$string_array = json_encode($data);

अब आप डेटाबेस में इस $ string_array मान को सम्मिलित कर सकते हैं


5

स्टोर साहचर्य सरणियों के लिए आप उपयोग कर सकते हैं serialize:

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
);

file_put_contents('stored-array.txt', serialize($arr));

और लोड का उपयोग कर unserialize:

$arr = unserialize(file_get_contents('stored-array.txt'));

print_r($arr);

लेकिन अगर .phpसरणी के साथ क्रिएटिक डायनामिक फ़ाइलों की आवश्यकता है (उदाहरण के लिए कॉन्फिग फाइल्स), तो आप इसका उपयोग कर सकते हैं var_export(..., true);, जैसे:

फ़ाइल में सहेजें:

$arr = array(
    'a' => 1,
    'b' => 2,
    'c' => 3
);

$str = preg_replace('#,(\s+|)\)#', '$1)', var_export($arr, true));
$str = '<?php' . PHP_EOL . 'return ' . $str . ';';

file_put_contents('config.php', $str);

सरणी मान प्राप्त करें:

$arr = include 'config.php';

print_r($arr);

3

आप PHP स्ट्रिंग फ़ंक्शन का उपयोग कर सकते हैं implode()

पसंद,

<?php
  $sports=$_POST['sports'];;
  $festival=$_POST['festival'];
  $food=$_POST['food'];
  $array=[$sports,$festival,$food];
  $string=implode('|',$array);
  echo $string;
?>

यदि, उदाहरण के लिए, $sports='football'; $festival='janmastami'; $food='biriyani';

तब उत्पादन होगा:

football|janmastami|biriyani

PHP प्रत्यारोपण () फ़ंक्शन पर अधिक जानकारी के लिए w3schools देखें


0

बहुत से रास्ते हैं ,

इसके लिए दो सबसे अच्छे तरीके हैं

$arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5);
echo json_encode($arr);
//ouputs as
{"a":1,"b":2,"c":3,"d":4,"e":5}


$b = array ('m' => 'monkey', 'foo' => 'bar', 'x' => array ('x', 'y', 'z'));
$results = print_r($b, true); // $results now contains output from print_r

आप पहले से दिए गए उत्तरों को दोहरा रहे हैं। यह नए मूल्य या नए तरीकों को नहीं जोड़ता है।
सुचलैकाना

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