如何在php中读取/写入结构化数据


How to read/write structured data in php?

我想读取更新数据从/插入到php中类似以下结构的平面文件中(简单版本),也可以手动插入。处理它最简单的方法是什么?

$schools = array(
    "PHCS"=> array(
        "full_name"=> "Pacific Hills Christian School",
        "version"=> "4.0.2b",
        "etc"=> "etc"
      ),
    "WAC"=> array(
        "full_name"=> "Wollondilly Anglican College",
        "version"=> "4.0.1",
        "etc"=> "etc"
      ),
  );

在使用YAML时,必须非常精确地使用语法和缩进,在vi中编辑XML也可能有点混乱。

所以我想使用php数组变量?如何将其保存为上述格式?

脑海中浮现出几件事:

  • 串行化,例如file_put_contents($file, serialize($schools))
  • sqlite,它不是一个平面文件,但很容易上手——你只需要把PDO指向你的数据库文件,然后就可以了。您可以通过CLI和基于web的工具进行编辑

编辑:啊,如果你需要通过文本编辑器进行编辑,那就不太好了。您可以使用PHP中的格式-

return array(
    "PHCS"=> array(
        "full_name"=> "Pacific Hills Christian School",
        "version"=> "4.0.2b",
        "etc"=> "etc"
      ),
        "WAC"=> array(
        "full_name" => "Wollondilly Anglican College",
        "version"=> "4.0.1",
        "etc"=> "etc"
    ),
  );

然后,您可以将其弹出到一个文件中并执行$schools = require($schools),它将很好地导入。我把它用于数据固定装置,它运行得很好。

好吧,如果你必须手动编辑文件,很难击败YAML,因为这种格式可能与你即将到来的(至少在这个星球上…)"一种设计的文件格式对手动编辑很友好。"

您对"使用PHP数组变量"的思考在这里实际上是无关紧要的,因为这些概念只适用于程序的操作。。。在读取中的数据之后,以及随后将数据写回之前它们与您决定使用的格式完全无关。

我建议你找出人类最容易处理的数据表示,然后围绕它编写计算机程序。此外,由于人类有可能吃到东西,程序应该不信任它的输入。如果遇到垃圾,它应该"礼貌、有意义和外交"地回应,例如:

  • "哎呀,我根本看不懂那个文件。"
  • 请稍等:该条目应该以大写三到四个字符的名称开头,例如WAC或PACS,但在第123456行没有
  • "请稍等:此条目应至少包含以下密钥:"full_name"、"version"answers"etc"。"但567891号线并不能做到这一点。"
  • "因为我刚刚在这个输入文件中发现了以下5个错误,如前所述,我特此拒绝处理其中的任何部分。(因此,我没有只是冲洗你的数据库。)"

好吧,你可以试试jason_encode/jason_edecode

它可以帮助您格式化所有数据以便输出。它还可以帮助您管理数据。

http://php.net/manual/en/function.json-encode.php

我使用了@Phil的解决方案php.net/manual/en/function.var-export.php

别忘了插入

  • <?php开始、以?>结束的PHP脚本块
  • variable name=之后

你可以使用类似的东西

<?php 'n'n'n'$schools='n" . var_export($schools,true) . "'n'n'n?>";