একটি ফাইল মুদ্রণ অ্যারে


180

আমি একটি ফাইলের জন্য একটি অ্যারের মুদ্রণ করতে চাই।

আমি ফাইলটি ঠিক এর মতো দেখতে দেখতে কোনও কোডটির মতো দেখতে কেমন দেখতে চাই।

print_r ($abc); ধরে নেওয়া $ abc একটি অ্যারে।

প্রতিটি বর্ণের জন্য নিয়মিত না হয়ে এর জন্য কোনও লাইন সমাধান রয়েছে কি?

পিএস - আমি বর্তমানে সিরিয়ালাইজ ব্যবহার করি তবে আমি ফাইলগুলি পঠনযোগ্য করে তুলতে চাই কারণ সিরিয়ালাইজড অ্যারেগুলির সাথে পঠনযোগ্যতা বেশ শক্ত।

উত্তর:


308

হয় var_exportবা print_rএটি মুদ্রণের পরিবর্তে আউটপুট ফেরত সেট করে।

পিএইচপি ম্যানুয়াল থেকে উদাহরণ

$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] => ব্লাহ" না ??
ব্যবহারকারী 1899415

14
@ ব্যবহারকারী 1899415 implodeঅ্যারে সহ PHP_EOLএবং ফাইলটিতে ফলাফলটি স্ট্রিং লিখুন।
গর্ডন

13
var_exportআপনি যদি পিএইচপি সিনট্যাক্সে ফাইলটি সংরক্ষণ করতে চান তবে ভাল। print_rফেরত দেয় [m] => monkeyতবে var_exportফিরে আসে'm' => 'monkey'
পেড্রাম বেহরোজি

1
@ হ্যাঁ হ্যাঁ, ফাইল_পুট_কন্টেন্টগুলিতে $ পতাকা বিকল্পগুলি পরীক্ষা করে দেখুন।
গর্ডন

5
@Wold উদাহরণস্বরূপ FILE_APPEND ব্যবহার করুন: ফাইল_পুট_কন্টেন্টস ('filename.txt', মুদ্রণ_আর ($ বি, সত্য), FILE_APPEND); এটি প্রতিবার ওভাররাইট না করে ফাইলের শেষে এগুলি যুক্ত করবে। তদতিরিক্ত , আপনি এটি এটিকে পরিবর্তন করতে পারেন: মুদ্রণ_আর ($ বি, সত্য)। " line 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 এ দ্বিতীয় প্যারাম যুক্ত করুন, অন্যথায় ফাইলটিতে লেখার জন্য কোনও সামগ্রী নেই।
অগ্রগতি

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',
  ),
);

এখানে ফাংশনটি (নোট: ফাংশনটি বর্তমানে ওওপ বাস্তবায়নের জন্য ফর্ম্যাট করা আছে))

  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
আমি যতদূর জানি মুদ্রণ_আর এমন ফর্ম্যাটতে ডেটা আউটপুট দেয় না যা ওয়ার্কিং পিএইচপি কোড হিসাবে অনুলিপি করে আটকানো যায় his এটি আউটপুটকে এমনভাবে ফর্ম্যাট করবে যা ওয়ার্কিং অ্যারে হিসাবে অনুলিপি এবং আটকানো যায়।
ডিয়েটার গ্রিবনিটজ

2

কেবল file_put_contents('file',$myarray); ফাইল_পুট_কন্টেন্টস ব্যবহার করুন () খুব অ্যারেতেও কাজ করে।


2
এটি আমার মতে সত্যিকারের গ্রহণযোগ্য উত্তর হওয়া উচিত, যদিও এটি উল্লেখযোগ্য যে ফাইল_পুট_সামগ্রীকরণগুলি এটির দ্বিতীয় যুক্তির জন্য কেবল একটি একক অ্যারে দিয়ে কাজ করতে পারে।
ব্যবহারকারী 3610279

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

আমি উপরে থেকে যা নিয়েছি, $ আরআল [ফল] "" (ডাবল কোটস) এর ভিতরে যেতে পারে এবং আরও প্রক্রিয়াকরণের জন্য পিএইচপি দ্বারা স্ট্রিং হিসাবে স্বীকৃত হতে পারে।

দ্বিতীয় উত্স হ'ল উপরের উত্তরের একটি কোড:

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

এটি দ্বিতীয় জিনিস যা আমি জানতাম না, FILE_APPEND।

আমি যেটি অর্জন করার চেষ্টা করছিলাম সেটি হ'ল কোনও ফাইল থেকে বিষয়বস্তু পাওয়া, পছন্দসই ডেটা সম্পাদনা করা এবং নতুন ডেটা দিয়ে ফাইল আপডেট করা তবে পুরাতন ডেটা মুছে ফেলার পরে।

এখন আমার কেবল আপডেট ডেটা যুক্ত করার আগে ফাইল থেকে ডেটা মুছতে হবে তা জানতে হবে।

অন্যান্য সমাধান সম্পর্কে:

এটি যাতে অন্য ব্যক্তির পক্ষে সহায়ক হতে পারে; যখন আমি var_export বা মুদ্রণ_আর বা সিরিয়ালাইজ বা জসন.এনকোড চেষ্টা করেছি , তখন আমি হয় => বা; এর মতো বিশেষ অক্ষর পেয়েছি; অথবা 'বা [] ফাইল বা কোনও ধরণের ত্রুটি। সমস্ত ত্রুটি মনে রাখার জন্য অনেক কিছু করার চেষ্টা করেছি। সুতরাং কেউ যদি আবার চেষ্টা করে দেখতে চান (আমার চেয়ে ভিন্ন পরিস্থিতি থাকতে পারে) তবে তারা ত্রুটিগুলি আশা করতে পারে।

ফাইল পড়া, সম্পাদনা এবং আপডেট সম্পর্কে:

আমি ভেরিয়েবল ( file অ্যারে ) এ ফাইল অ্যারে লোড করতে fgets () ফাংশনটি ব্যবহার করেছি এবং তারপরে আনসেট ($ অ্যারে [x]) (যেখানে এক্স পছন্দসই অ্যারে নম্বর, 1,2,3 ইত্যাদি) নির্দিষ্ট অ্যারে সরানোর জন্য ব্যবহার করি। তারপরে আর -ইনডেক্স করতে অ্যারে_ভ্যালু () ব্যবহার করুন এবং অ্যারেটিকে অন্য ভেরিয়েবলের মধ্যে লোড করুন এবং তারপরে টার্গেট ফাইলে অ্যারে (কোনও বিশেষ অক্ষর ছাড়াই) ফেলে দেওয়ার জন্য কিছুক্ষণ লুপ এবং উপরের সমাধানগুলি ব্যবহার করুন।

$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

তবে ওপিকে অ্যারে লিখতে হবে কারণ এটি ফাইলের মতো রয়েছে আমি এই পৃষ্ঠাটিতে অবতীর্ণ করেছি এমন একটি সন্ধানের জন্য যেখানে আমি ফাইলটিতে অ্যারে লিখতে পারি এবং তার চেয়ে সহজে পিএইচপি ব্যবহার করে আবার পড়তে পারি।

আমি 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."];");
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.