从文本文件中迭代的PHP多维数组

时间:2017-11-13 19:36:15

标签: php string file multidimensional-array foreach

我有一个名为 C.txt 的文本文件。文本文件的标记如下:

  

名称,BPrice,SPrice,显示
  诺基亚520,20000,21000,1   小米123,15000,17000,0   Xiaomi Redmi,30000,32000,1

我使用以下代码访问了该文件:

<?php

    $file = fopen("C.txt", "r");
    while(!feof($file)){
        $content = fgets($file);
        $products[] = $content;
    }

    var_dump($products);

?>

var_dump($products)给出输出:

  

array(4){[0] =&gt; string(33)“Name,BPrice,SPrice,Display”[1] =&gt; string(29)“Nokia 520,20000,21000,1”[2] =&gt; string(29)“Xiaomi123,15000,17000,0”[3] =&gt; string(30)“Xiaomi Redmi,30000,32000,1”}

我想要做的是分离名称 BPrice SPrice 显示列他们的值使用explode()方法。所以,我尝试了以下内容:

<?php

        for($i=1; $i<count($products); $i++){

              $contents[] = explode(",", $products[$i]);

        }

        var_dump($contents);

?>

var_dump($contents)收益:

  

array(3){[0] =&gt; array(4){[0] =&gt; string(9)“Nokia 520”[1] =&gt; string(6)“20000”[2] =&gt; string(6)“21000”[3] =&gt; string(5)“1”} [1] =&gt; array(4){[0] =&gt; string(9)“Xiaomi123”[1] =&gt; string(6)“15000”[2] =&gt; string(6)“17000”[3] =&gt; string(5)“0”} [2] =&gt; array(4){[0] =&gt; string(12)“Xiaomi Redmi”[1] =&gt; string(6)“30000”[2] =&gt; string(6)“32000”[3] =&gt; string(3)“1”}}

注意:我只想访问列的值而不是标题,因此for($i=1; $i<count($products); $i++)

现在我正面临这个问题。如何访问此二维数组$contents
我尝试了以下foreach loop

foreach ($contents as $key => $value) {
    echo $value[$key];
}

但结果是:

  

诺基亚520 15000 32000

我似乎无法弄明白为什么它不打印两行的其余部分!任何帮助都将不胜感激。提前致谢! :)

3 个答案:

答案 0 :(得分:0)

您的问题出在echo $value[$key];。 此上下文中的$ key变量保存当前$contents数组成员的键,而您使用它来访问内部数组的值,即产品数据。

由于这是一个多维数组,因此需要多个循环才能将其全部打印出来。所以,如果你想这样做,它会像这样工作:

foreach ($contents as $productValues) {
    foreach ($productValues as $productValue) {
        echo $productValue;
    }
    echo PHP_EOL;
}

答案 1 :(得分:0)

尝试使用此函数将cvs文件解析为关联数组,其列名为数组键:

function csvArray($file) {
    $csv = array_map('str_getcsv', file($file));
    array_walk($csv, function(&$a) use ($csv) {
      $a = array_combine($csv[0], $a);
    });
    array_shift($csv);
return $csv;
}

然后是

的结果
$phones = csvArray('c.txt');
print_r($phones);

时:

Array
(
    [0] => Array
        (
            [Name] => Nokia 520
            [ BPrice] =>  20000
            [ SPrice] =>  21000
            [ Display] =>  1
        )

    [1] => Array
        (
            [Name] => Xiaomi123
            [ BPrice] =>  15000
            [ SPrice] =>  17000
            [ Display] =>  0
        )

    [2] => Array
        (
            [Name] => Xiaomi Redmi
            [ BPrice] =>  30000
            [ SPrice] =>  32000
            [ Display] =>  1
        )

)

答案 2 :(得分:0)

你的数组用更易读的术语看起来像这样

[["Nokia 520", "20000", "21000", "1"], 
 ["Xiaomi123", "15000", "17000", "0"], 
 ["Xiaomi Redmi", "30000", "32000", "1"]]

这意味着在您的foreach中,第一个键的

["Nokia 520", "20000", "21000", "1"]

你只是获得这些价值的原因是你正在做的

echo $value[$key];

基本上,您要返回0的{​​{1}} 12个职位,这些职位是["Nokia 520", "20000", "21000", "1"]Nokia 520和{{ 1}}

要获得您真正想要的值,您需要执行两个foreach循环

20000