从txt文件PHP读取数组不起作用

时间:2015-01-29 20:46:08

标签: php

我不确定我在这里做错了什么。我有一个存储和数组的txt文件:

 Array
      (
      [0] => Array
           (
                [sku] => 123123
           )
      )

当我通过php读取文件并循环遍历它时,它给了我这个错误:

 Invalid argument supplied for foreach()

代码:

 $items = $file->getContents();
 foreach($items as $item){

 }

备用代码(序列化和反序列化):

 $items = $file->getContents();
 $itemsA = serialize($items);
 $itemsB = unserialize($itemsA);
 foreach($itemsB as $item){

 }

 Produces this error as well: Invalid argument supplied for foreach()

4 个答案:

答案 0 :(得分:1)

你可以序列化然后反序列化或json_encode然后json_decode

如果您的文件不是动态的(也就是配置文件),请检查此answer

答案 1 :(得分:0)

这是一个var_dumped数组。要将数组存储在文件中,您可以将其序列化然后编写它,当您从文件中读取它时,然后将其反序列化以使数组返回。

答案 2 :(得分:0)

  

阵         (         [0] =>排列              (                   [sku] => 123123              )         )

$items = $file->getContents();
$items = str_replace(array('> Array','[',']'),array('> new Array',"'","'"),$items );
file_put_content("TMPFILENAME","<\?PHP\n return new $items;");
$items = include "TMPFILENAME";

替换&#34; &#39;如果需要的话 如果你需要数字键,请先做一些:

$items = preg_replace('#(?:\[([0-9]+)\])+#','$1',$items );

还脏! Convert var_dump of array back to array variable

\?至 ? ! WYSIWYG ...

答案 3 :(得分:0)

由于缺乏代码,我会做一些假设。

添加所需代码后会更改这些内容。

没有关于如何创建该文件的信息。


输出看起来像来自var_dump()print_r() 我不完全确定使用了哪种。
如果使用了这些,请忘记文件。

如果要恢复此文件,则必须手动将其转换为实际工作代码(通过在数组中的键名称周围添加引号),将return(后面有空格)添加到文件中{ {1}}它。

要重新执行该文件,并在下次编写时,您有以下几种方法:

  1. 使用功能include
    这很容易使用!
    只需传递变量就可以了 这是一个例子:

    serialize()

    然后使用$text=serialize($variable);提取数据 像这样:

    unserialize()

  2. 使用$data=unserialize($text);保存数据 它的工作方式相同:

    json_encode()

    使用$text=json_encode($data);获取数据,如下所示:

    json_decode()

    请注意,JSON数据可以用于许多其他语言,包括Javascript!
    此外,此方法比$data=json_decode($text);快。

  3. 使用serialize()在字符串中获取有效的PHP代码 像这样:

    var_export()
    $php=var_export($data);
    //write the file like this, prepending '<?php return ' to it:

    会写出如下内容:

    file_put_contents('file.php','<?php return '.$php);

    要阅读该文件,只需使用return Array(1,2,3); //example code.include

    require

    是的,include可以接收数组数据!
    到目前为止,这是最快的方法!