【问题标题】:Proper syntax & structure for 2 nesting foreach() loops after a var_dump()var_dump() 之后的 2 个嵌套 foreach() 循环的正确语法和结构
【发布时间】:2013-05-27 06:25:19
【问题描述】:

作为未受过 PHP 教育的人,当我尝试创建和保存由在线表单提交的数据制成的 CSV 文件时,我开始感到困惑。

在将输入发布到 PHP 代码/页面后,我在尝试从输入中“提取”数据时遇到了巨大的麻烦

出于这个问题的目的,假设我总共有 15 个输入,分为 5 行和 3 列。

我收到了一些使用 var_dump() 创建输入数组的建议。这工作得很好。我还被告知,在 var_dump() 之后,我应该构建 2 个嵌套的 foreach() 循环,而我正是在这里感到困惑。

假设表格如下所示:


var_dump() 产生的数组是这样的:

array(5) { 
    [1]=> array(3) { 
        ["A"]=> string(0) "" ["B"]=> string(0) "" ["C"]=> string(0) "" 
    }
    [2]=> array(3) {
        ["A"]=> string(0) "" ["B"]=> string(0) "" ["C"]=> string(0) ""
     }
    [3]=> array(3) {
        ["A"]=> string(0) "" ["B"]=> string(0) "" ["C"]=> string(0) ""
     }
    [4]=> array(3)
    {
        ["A"]=> string(0) "" ["B"]=> string(0) "" ["C"]=> string(0) ""
    }
    [5]=> array(3) {
        ["A"]=> string(0) "" ["B"]=> string(0) "" ["C"]=> string(0) ""
    }
} 

显然 strlen() 在填充时不会为 0。 [1] 等将是行,["A"] 等将是列。

现在跳过,最终的游戏是创建一个可能如下所示的 CSV 结构:

Header One,Header Two,Header Three,
row1-column1,row1-column2,row1-column3,
row2-column1,row2-column2,row2-column3,
row3-column1,row3-column2,row3-column3,
row4-column1,row4-column2,row4-column3,
row5-column1,row5-column2,row5-column3,

我想我可以弄清楚如何将回显的输出保存到 CSV 文件中,但我要问的是如何从数组中提取输入(假设 strlen() 为 >0)?

我又收到了一些关于使用两个嵌套 foreach 循环的提示。

我一定很厚,但我根本无法得到任何 foreach 变化来呼应任何东西。

利用以下建议的代码:

var_dump($_POST['Input_row']);

foreach ($Rows as $Columns) {        
 foreach ($Columns as $column){
   echo $column.',';
 }
 echo "\r\n";
}

【问题讨论】:

  • +1 表示格式良好且详细的问题,但我不确定我是否理解“数字”和“字母”的内容 - 我在您的 var_dump 中看不到这一点。不过,更广泛的一点是,我们可以看到您是如何创建 CSV 行的吗?确保您使用的是this standard PHP function,它会为您完成!
  • (对了,我很好奇:我偶尔会看到这样的帖子,里面<br/><br/>是用来创建分节符的。你是手动写的吗?输入return-return就行了'会做同样的事情!)
  • 只有一个 foreach 循环,并使用 fputcsv()... 这消除了第二个循环的需要,因为您在一次调用中编写了整行/行,并且还确保您不会有编写自制 CSV 编写器代码的问题
  • @halfer 我编辑了这个问题,关于你关于问题中 [numbers] 元素的问题。关于

    ...我没有很好的解释或借口..我猜只是很奇怪

标签: php foreach nested-loops var-dump multidimensional-array


【解决方案1】:
   $file=fopen(<DIRECTORY_PATH>."file.csv","w");
    if(!$file){
       //error
    }

    $csv_data="";
    $i=0;
    foreach($x as $row){
     $i++;
     foreach($row as $element){
        $csv_data.="row-".$i."-".$element.", ";
     }
    //remove the last comma
    $csv_data.="\n";

    }

    fwrite($file,$csv_data);

$query="load data infile '".<DIRECTORY_PATH>."file.csv"."' into table your_table";
if(!mysqli->query($query))
 printf("Error: %s\n", $mysqli->error);

【讨论】:

  • 我把数据库插入,以防您以后想将 .csv 导入数据库。
  • 考虑如果字符串 $element 包含逗号会发生什么。
【解决方案2】:

要访问单个值,您可以像这样放置两个循环

foreach ($Rows as $Columns) {        
 foreach ($Columns as $column){
   echo $column.',';
 }
 echo "\r\n";
}

如果你想要一个 csv,你可以这样:

$fp = fopen('file.csv', 'w');

foreach ($Rows as $Columns) {        
    fputcsv($fp, $Columns);
}

fclose($fp);

【讨论】:

    猜你喜欢
    • 2019-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-26
    • 2012-05-16
    • 2017-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多