फ़ाइल में सरणी प्रिंट करें


181

मैं एक फ़ाइल में एक सरणी प्रिंट करना चाहूंगा।

मैं फ़ाइल को ठीक उसी तरह देखना चाहूंगा जैसे कि यह कोड कैसा दिखता है।

print_r ($abc); $ abc ग्रहण करना एक सरणी है।

क्या प्रत्येक लुक के लिए नियमित होने के बजाय इसके लिए कोई एक लाइन सॉल्यूशन है।

PS - मैं वर्तमान में क्रमबद्ध का उपयोग करता हूं, लेकिन मैं फ़ाइलों को पठनीय बनाना चाहता हूं क्योंकि क्रमबद्ध सरणियों के साथ पठनीयता काफी कठिन है।

जवाबों:


309

इसे प्रिंट करने के बजाय आउटपुट को वापस var_exportकरने के print_rलिए या तो सेट करें।

PHP मैनुअल से उदाहरण

$b = array (
    'm' => 'monkey', 
    'foo' => 'bar', 
    'x' => array ('x', 'y', 'z'));

$results = print_r($b, true); // $results now contains output from print_r

फिर आप को बचा सकता है $resultsके साथ file_put_contents। या फ़ाइल में लिखते समय इसे सीधे लौटाएँ:

file_put_contents('filename.txt', print_r($b, true));

आप केवल सरणी की सामग्री को कैसे बचा सकते हैं और पूरे सरणी को नहीं ["0] => ब्लाह" ??
user1899415

14
@ user1899415 implodeके साथ सरणी PHP_EOLऔर फाइल करने के लिए परिणामी स्ट्रिंग लिखें।
गॉर्डन

13
var_exportयदि आप फ़ाइल को php सिंटैक्स में सहेजना चाहते हैं तो बेहतर है। print_rरिटर्न [m] => monkeyलेकिन var_exportरिटर्न'm' => 'monkey'
पेडराम बेहारोजी

1
@Wold हाँ, file_put_contents में $ झंडे विकल्प की जाँच करें।
गॉर्डन

5
@ इस उदाहरण के लिए FILE_APPEND का उपयोग करें: file_put_contents ('filename.txt', print_r ($ b, true), FILE_APPEND); यह उन्हें हर बार ओवरराइट किए बिना फ़ाइल के अंत में जोड़ देगा। इसके अलावा, आप इसे बदल सकते हैं: Print_r ($ b, true)। अतिरिक्त लाइन ब्रेक या नई लाइन जोड़ने के लिए "n"
तारिक

53

बस उपयोग करें print_r; ) प्रलेखन पढ़ें :

यदि आप के आउटपुट को कैप्चर करना चाहते हैं print_r(), तो returnपैरामीटर का उपयोग करें । जब यह पैरामीटर सेट हो जाता है TRUE, print_r() तो इसे प्रिंट करने के बजाय जानकारी वापस कर देगा।

तो यह एक संभावना है:

$fp = fopen('file.txt', 'w');
fwrite($fp, print_r($array, TRUE));
fclose($fp);


25

तुम कोशिश कर सकते हो:

$h = fopen('filename.txt', 'r+');
fwrite($h, var_export($your_array, true));

trueVar_export का दूसरा परम जोड़ें , अन्यथा फ़ाइल में लिखने के लिए कोई सामग्री नहीं है।
1

var_export मेरे अनुभव में एक बेहतर समाधान था क्योंकि यह सरणी वेरिएबल को कोट करता है इसलिए उपयोग करते समय सरणी मानों को शामिल करने / उपयोग करने के लिए बेहतर तरीके से संभालता है
पीट - iCalculator

8

त्वरित और सरल यह करें:

file_put_contents($filename, var_export($myArray, true));

4

आप इसे $myArrayऐरे के रूप में आज़मा सकते हैं

$filename = "mylog.txt";
$text = "";
foreach($myArray as $key => $value)
{
    $text .= $key." : ".$value."\n";
}
$fh = fopen($filename, "w") or die("Could not open log file.");
fwrite($fh, $text) or die("Could not write file!");
fclose($fh);

4

मैंने इस फ़ंक्शन को टेक्स्ट के रूप में एक एरे को आउटपुट करने के लिए लिखा है:

अच्छी तरह से स्वरूपित सरणी का उत्पादन करना चाहिए।

महत्वपूर्ण लेख:

उपयोगकर्ता इनपुट से सावधान रहें।

यह स्क्रिप्ट आंतरिक उपयोग के लिए बनाई गई थी।

यदि आप इसे सार्वजनिक उपयोग के लिए उपयोग करने का इरादा रखते हैं तो आपको स्क्रिप्ट इंजेक्शन को रोकने के लिए कुछ अतिरिक्त डेटा सत्यापन जोड़ना होगा।

यह मूर्ख प्रमाण नहीं है और इसका उपयोग केवल विश्वसनीय डेटा के साथ किया जाना चाहिए।

निम्नलिखित समारोह कुछ इस तरह उत्पादन होगा:

$var = array(
  'primarykey' => array(
    'test' => array(
      'var' => array(
        1 => 99,
        2 => 500,
      ),
    ),
    'abc' => 'd',
  ),
);

यहाँ फ़ंक्शन है (नोट: फ़ंक्शन को वर्तमान में oop कार्यान्वयन के लिए स्वरूपित किया गया है।)

  public function outArray($array, $lvl=0){
    $sub = $lvl+1;
    $return = "";
    if($lvl==null){
      $return = "\t\$var = array(\n";  
    }
      foreach($array as $key => $mixed){
        $key = trim($key);
        if(!is_array($mixed)){
          $mixed = trim($mixed);
        }
        if(empty($key) && empty($mixed)){continue;}
        if(!is_numeric($key) && !empty($key)){
          if($key == "[]"){
            $key = null;
          } else {
            $key = "'".addslashes($key)."'";
          }
        }

        if($mixed === null){
          $mixed = 'null';
        } elseif($mixed === false){
          $mixed = 'false';
        } elseif($mixed === true){
          $mixed = 'true';
        } elseif($mixed === ""){
          $mixed = "''";
        } 

        //CONVERT STRINGS 'true', 'false' and 'null' TO true, false and null
        //uncomment if needed
        //elseif(!is_numeric($mixed) && !is_array($mixed) && !empty($mixed)){
        //  if($mixed != 'false' && $mixed != 'true' && $mixed != 'null'){
        //    $mixed = "'".addslashes($mixed)."'";
        //  }
        //}


        if(is_array($mixed)){
          if($key !== null){
            $return .= "\t".str_repeat("\t", $sub)."$key => array(\n";
            $return .= $this->outArray($mixed, $sub);
            $return .= "\t".str_repeat("\t", $sub)."),\n";
          } else {
            $return .= "\t".str_repeat("\t", $sub)."array(\n";
            $return .= $this->outArray($mixed, $sub);
            $return .= "\t".str_repeat("\t", $sub)."),\n";            
          }
        } else {
          if($key !== null){
            $return .= "\t".str_repeat("\t", $sub)."$key => $mixed,\n";
          } else {
            $return .= "\t".str_repeat("\t", $sub).$mixed.",\n";
          }
        }
    }
    if($lvl==null){
      $return .= "\t);\n";
    }
    return $return;
  }

वैकल्पिक रूप से आप इस स्क्रिप्ट का उपयोग कर सकते हैं जो मैंने कुछ समय पहले लिखा था:

यह एक सरणी के कुछ हिस्सों को कॉपी और पेस्ट करना अच्छा है।

(धारावाहिक आउटपुट के साथ ऐसा करना असंभव होगा)

सबसे साफ कार्य नहीं है, लेकिन यह काम पूरा करता है।

यह निम्नानुसार आउटपुट करेगा:

$array['key']['key2'] = 'value';
$array['key']['key3'] = 'value2';
$array['x'] = 7;
$array['y']['z'] = 'abc';

उपयोगकर्ता इनपुट के लिए भी ध्यान रखें। यहाँ कोड है।

public static function prArray($array, $path=false, $top=true) {
    $data = "";
    $delimiter = "~~|~~";
    $p = null;
    if(is_array($array)){
      foreach($array as $key => $a){
        if(!is_array($a) || empty($a)){
          if(is_array($a)){
            $data .= $path."['{$key}'] = array();".$delimiter;
          } else {
            $data .= $path."['{$key}'] = \"".htmlentities(addslashes($a))."\";".$delimiter;
          }
        } else {
          $data .= self::prArray($a, $path."['{$key}']", false);
        }    
      }
    }
    if($top){
      $return = "";
      foreach(explode($delimiter, $data) as $value){
        if(!empty($value)){
          $return .= '$array'.$value."<br>";
        }
      };
      echo $return;
    }
    return $data;
  }

1
जहाँ तक मुझे पता है print_r एक फॉर्मेट में डेटा को आउटपुट नहीं करता है जिसे कॉपी किया जा सकता है और काम करने वाले php कोड के रूप में चिपकाया जा सकता है। यह आउटपुट को इस तरह से फॉर्मेट करेगा जिसे कॉपी किया जा सकता है और वर्किंग एरे के रूप में पेस्ट किया जा सकता है।
डायटर ग्रिबित्ज़

2

बस file_put_contents('file',$myarray); फ़ाइल का उपयोग करें_पुट_कंट () सरणियों के साथ भी काम करता है।


2
यह वास्तव में मेरी राय में स्वीकृत उत्तर होना चाहिए, हालांकि यह ध्यान देने योग्य है कि file_put_contents केवल एक सरणी के साथ काम कर सकता है इसके लिए दूसरा तर्क है।
user3610279

1

मैंने पिछले 17 घंटों में जो सीखा है, वह इसी तरह के समाधान की खोज करते हुए मेरी समस्या को हल करता है।

संसाधन:

http://php.net/manual/en/language.types.array.php

विशिष्ट कोड:

// The following is okay, as it's inside a string. Constants are not looked for
// within strings, so no E_NOTICE occurs here
print "Hello $arr[fruit]";      // Hello apple

मैंने ऊपर से लिया, $ गिरफ्तार [फल] अंदर जा सकता है "" (दोहरे उद्धरण) और आगे की प्रक्रिया के लिए PHP द्वारा स्ट्रिंग के रूप में स्वीकार किया जा सकता है।

दूसरा संसाधन उपरोक्त उत्तरों में से एक में कोड है:

file_put_contents($file, print_r($array, true), FILE_APPEND)

यह दूसरी चीज है जिसे मैं नहीं जानता था, FILE_APPEND।

मैं जो हासिल करने की कोशिश कर रहा था, वह फ़ाइल से सामग्री प्राप्त करना है, वांछित डेटा को संपादित करें और नए डेटा के साथ फ़ाइल को अपडेट करें लेकिन पुराने डेटा को हटाने के बाद।

अब मुझे केवल यह जानने की आवश्यकता है कि अपडेट किए गए डेटा को जोड़ने से पहले फ़ाइल से डेटा को कैसे हटाया जाए।

अन्य समाधानों के बारे में:

बस इतना है कि यह अन्य लोगों के लिए सहायक हो सकता है; जब मैंने var_export या Print_r या Serialize या Json.Encode की कोशिश की , तो मुझे या तो विशेष वर्ण मिले जैसे => या; या 'या [] फ़ाइल में या किसी प्रकार की त्रुटि। सभी त्रुटियों को याद करने के लिए बहुत सी चीजों की कोशिश की। इसलिए यदि कोई उन्हें फिर से आज़माना चाहे (मेरा अलग परिदृश्य हो सकता है), वे त्रुटियों की उम्मीद कर सकते हैं।

पठन फ़ाइल, संपादन और अद्यतन के बारे में:

मैंने फ़ाइल सरणी को एक चर ($ सरणी) में लोड करने के लिए फ़्यूज़ () फ़ंक्शन का उपयोग किया और फिर विशेष सरणी को हटाने के लिए unset ($ array [x]) (जहां x वांछित सरणी संख्या, 1,2,3 आदि के लिए खड़ा है) का उपयोग करें। फिर array_values ​​() का उपयोग फिर से इंडेक्स करने के लिए और दूसरे वेरिएबल में एरे को लोड करने के लिए करें और फिर ऐरे (डुप्लिकेट) को किसी भी विशेष वर्ण के बिना डंप करने के लिए लूप और उपरोक्त समाधान का उपयोग करें।

$x=0;

while ($x <= $lines-1) //$lines is count($array) i.e. number of lines in array $array
    {
        $txt= "$array[$x]";
        file_put_contents("file.txt", $txt, FILE_APPEND);
        $x++;
    }

1

नीचे अच्छा और अधिक पठनीय काम करना चाहिए <pre>

<?php 

ob_start();
echo '<pre>';
print_r($array);
$outputBuffer = ob_get_contents();
ob_end_flush();
file_put_contents('your file name', $outputBuffer);
?>

1

हालाँकि ऑप को सरणी लिखने की आवश्यकता है क्योंकि यह फ़ाइल पर है मैंने इस पृष्ठ को एक समाधान खोजने के लिए उतरा है जहां मैं फ़ाइल को लिखने के लिए एक सरणी लिख सकता हूं और बाद में फिर से php का उपयोग करके आसानी से पढ़ सकता हूं।

मुझे json_encode का उपयोग करके अपने स्वयं के समाधान का पता चला है, इसलिए कोई भी व्यक्ति उसी के लिए देख रहा है यहां कोड है:

file_put_contents('array.tmp', json_encode($array));

पढ़ने से

$array = file_get_contents('array.tmp');
$array = json_decode($array,true);

0

test.php

<?php  
return [
   'my_key_1'=>'1111111',
   'my_key_2'=>'2222222',
];

index.php

// Read array from file
$my_arr = include './test.php';

$my_arr["my_key_1"] = "3333333";

echo write_arr_to_file($my_arr, "./test.php");

/**
* @param array $arr <p>array</p>
* @param string $path <p>path to file</p>
* example :: "./test.php"
* @return bool <b>FALSE</b> occurred error
* more info: about "file_put_contents" https://www.php.net/manual/ru/function.file-put-contents.php
**/
function write_arr_to_file($arr, $path){
    $data = "\n";
    foreach ($arr as $key => $value) {
        $data = $data."   '".$key."'=>'".$value."',\n";
    }
    return file_put_contents($path, "<?php  \nreturn [".$data."];");
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.