如何在PHP中从多维数组中读取文件并存储?

时间:2017-10-02 02:27:06

标签: php

我试图从一个文件读取并存储在一个多维数组中。我的最终数组看起来应该是这样的:

$products = [
     "tshirt" => [
          "color" => "red",
          "designer" => "hisName",
          "year" => "2000"
          ]
     "pants" => [
          "color" => "black,
          "designer" => "hisName",
          "year" => "2003"
          ]
    ]

我很困惑,因为我没有得到如何指定在数组中存储数据的位置。

这是我的代码:

<?php
$lignes = file('./file.txt');
$index = 0;
$indexId = 0;

foreach($lignes as $ligne){
    $ligne = trim($ligne);
    if($index == 0){
        $id = $ligne;
        $livres[$indexId] = $id;
        $indexId++;
        $index++;
    }elseif($ligne != "+ + +"){
        $livres[$id][] = $ligne;
    }else{
        $index = 0;
    }
}
?>

这里是file.txt内容的预览:

type
color
designer
year
+ + +
type
color
designer
year

每个条目用+ + +

分隔

2 个答案:

答案 0 :(得分:1)

您的文本文件需要更多信息,除非所有信息都按特定顺序排列......不知何故,密钥必须与文本文件中的值绑定,因此我假设每个第1个元素都是类别,并且之后的元素是特定的键,如颜色等。我模仿你的文本文件到一个数组..这将发生在你的file()语句...你也可以使用switch()命令,但我试图按照你的代码尽可能接近。

<?php

$lignes = array('tshirt','red','hisName','2000','+ + +','pants','black','hisName','2003');
$index = 0;
$category = "";
$type = "";

foreach($lignes as $ligne){
    $ligne = trim($ligne);
    if($index == 0) { $category = $ligne; } 
    elseif ($index == 1) { $type = "color"; } 
    elseif ($index == 2) { $type = "designer"; } 
    elseif ($index == 3) { $type = "year"; } 
    elseif ($ligne == "+ + +") {
        $index = -1;
        $category = "";
        $type = "";
        }
    $index++;

    if ($category && $type) {
        $livres[$category][$type] = $ligne;
        }
    }

print "<pre>";
print_r($livres);
print "</pre>";
?>

我的结果是:

Array
(
    [tshirt] => Array
        (
            [color] => red
            [designer] => hisName
            [year] => 2000
        )

    [pants] => Array
        (
            [color] => black
            [designer] => hisName
            [year] => 2003
        )

)

答案 1 :(得分:1)

假设产品,颜色,设计师和年份总是按顺序排列:

<?php

for( $i=0; $i < sizeof( $lignes ); $i++ ){
    $product = $lignes[ $i++ ];
    $products[ $product ][ 'color' ] = $lignes[ $i++ ];
    $products[ $product ][ 'designer' ] = $lignes[ $i++ ];
    $products[ $product ][ 'year' ] = $lignes[ $i++ ];
}