首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从文本文件中迭代PHP多维数组

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

Stack Overflow用户
提问于 2017-11-13 19:36:14
回答 3查看 526关注 0票数 0

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

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

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

代码语言:javascript
复制
<?php

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

    var_dump($products);

?>

var_dump($products)提供输出:

数组(4){ =>字符串(33)“名称,BPrice,SPrice,显示”1=> string(29)“Nokia520,20000,21000,1”2=> string(29) "Xiaomi123,15000,17000,0“3=> string(30)”小米红米,30000,32000,1“}

我想要做的是使用BPrice方法分隔名称、SPrice和显示列及其值。因此,我尝试了以下几点:

代码语言:javascript
复制
<?php

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

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

        }

        var_dump($contents);

?>

var_dump($contents)产量:

数组(3){ =>数组(4){ =>字符串(9)“nokia520”1=>字符串(6)“20000”2=>字符串(6)“21000”3=>字符串(5)“1”} 1=>数组(4){ => string(9) "Xiaomi123“1=> string(6)”15000“2=> string(6)”17000“3=> string(5)”0“2=> (4){ => string(12 )=>string(12)1=> string(6)”15000“2=> string(6)”17000“3=> string(5)”0“2=>(4))“小米红米”1=>字符串(6)“30000”2=>字符串(6)“32000”3=>字符串(3)“1”}

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

现在我面临的问题就在这里。如何访问这个二维数组$contents

我尝试了以下foreach loop

代码语言:javascript
复制
foreach ($contents as $key => $value) {
    echo $value[$key];
}

但结果是:

诺基亚520 15000 32000

我似乎不明白为什么不打印这两行的其余部分!任何帮助都将是非常感谢的。谢谢!)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-11-13 19:45:23

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

由于这是一个多维数组,您将需要多个循环来打印出来。所以如果你想这样做的话,它会是这样的:

代码语言:javascript
复制
foreach ($contents as $productValues) {
    foreach ($productValues as $productValue) {
        echo $productValue;
    }
    echo PHP_EOL;
}
票数 0
EN

Stack Overflow用户

发布于 2017-11-13 19:46:15

尝试使用此函数将cvs文件解析为具有列名作为数组键的关联数组:

代码语言:javascript
复制
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;
}

然后结果

代码语言:javascript
复制
$phones = csvArray('c.txt');
print_r($phones);

是:

代码语言:javascript
复制
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
        )

)
票数 0
EN

Stack Overflow用户

发布于 2017-11-13 19:49:03

数组的可读性更强,如下所示

代码语言:javascript
复制
[["Nokia 520", "20000", "21000", "1"], 
 ["Xiaomi123", "15000", "17000", "0"], 
 ["Xiaomi Redmi", "30000", "32000", "1"]]

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

代码语言:javascript
复制
["Nokia 520", "20000", "21000", "1"]

你只得到这些值的原因是你在做

代码语言:javascript
复制
echo $value[$key];

实际上,您返回的位置是0 12 of ["Nokia 520", "20000", "21000", "1"],它们是Nokia 5202000021000的值。

要获得实际需要的值,需要执行两个foreach循环

代码语言:javascript
复制
foreach ($arr as $keys) {
    foreach($keys as $value) {
        echo "{$value} ";
    }
    echo "\n";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47272170

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档