【问题标题】:php var with multiple assoc arrays, get values one array at a time具有多个关联数组的php var,一次获取一个数组的值
【发布时间】:2021-02-26 14:48:42
【问题描述】:

最初,我使用上传的 .csv 文件并一次遍历一行的值.. 使用下面的 while 循环。

 while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
     var_dump($data);
     $importIt = $repo->impThreeCSV($which, $data);
 }

我已将 .csv 上传功能重做为一个 Web 表单,我可以在其中通过“保存按钮”将 json 发送到 PHP 文件。我现在有一个包含多个关联数组的变量..

    $fd = json_decode($df, true);
    var_dump($fd);

例如,上面的转储包含多个数组,如下所示:即(约 300 个类似数组,如下所示)。

array (size=806)
  0 => 
    array (size=18)
      'ATM_ID' => string 'AFF-MIL-TWR' (length=11)
      'FAC_IDENT' => string 'AFF' (length=3)
      'LG_NAME' => string 'BLACH BLAH ACADEMY' (length=20)
      'BASIC_TP' => string 'MIL-TWR' (length=7)
      .................
  • 我怎样才能只在这些数组中迭代 VALUES,一个在一个 时间与我原来的 while 循环相同。(这将是 理想,所以我不必重做整个后端)。

  • 我在处理多个数组和获取 值只输出..

  • 我已经尝试了以下两次尝试,我只是得到'arrayarrayarray'或 类似var_dump。我是否需要将每个数组分解为 自己的变量?我在这里做错了什么?我需要计算一下如何 许多数组包含在我的 var 中?

     $fd = json_decode($df, true);
     var_dump($fd);
    
     $data = array_values($fd);
     foreach ($data as $array_key) {
         echo $array_key;
     }
    
     $array_keys = array_keys($fd);
         foreach ($array_keys as $array_key) {
         echo $array_key;
     }
    

附:不,我不能使用 pandas,我希望。

【问题讨论】:

  • 只是为了确定,以包含多个数组的转储为例,你想要的 foreach 将得到'AFF-MIL-TWR',然后是'AFF'等,在一个循环中执行所有数组如果它们都在同一个数组中?
  • 不,理想情况下将每个数组视为一个“行”,例如我原来的带有 csv 数据的 while 循环
  • 每个数组都是我要导入数据库的一行数据..
  • 啊,这很简单,foreach 里面的foreach。我会发布一个答案。
  • 我猜他这样做是为了不“窃取”答案,这很好!然后添加了答案:) 谢谢汤姆。

标签: php arrays foreach while-loop associative-array


【解决方案1】:

您需要执行一次 foreach 循环遍历每个数组,然后执行另一个 foreach 循环遍历您循环遍历的数组的每个值。

$decodedJson = [
    [
        'ATM_ID' => 'AFF-MIL-TWR 1',
        'FAC_IDENT' => 'AFF',
        'LG_NAME' => 'BLACH BLAH ACADEMY',
        'BASIC_TP' => 'MIL-TWR',
    ],
    [
        'ATM_ID' => 'AFF-MIL-TWR 2',
        'FAC_IDENT' => 'AFF',
        'LG_NAME' => 'BLACH BLAH ACADEMY',
        'BASIC_TP' => 'MIL-TWR',
    ],
];

foreach ($decodedJson as $array) {
    foreach ($array as $item) {
        print $item; # => AFF-MIL-TWR 1
    }
}

【讨论】:

    【解决方案2】:

    假设您想以与原始代码相同的方式处理数据,您只需使用以下内容:

    foreach ($fd as $data) {
        $importIt = $repo->impThreeCSV($which, array_values($data));
    }
    

    注意,我使用array_values$data 从关联数组转换为数字索引数组,即与fgetcsv 返回的格式相同。这可能 - 取决于您的 $repo->impThreeCSV 代码 - 不是必需的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-20
      • 1970-01-01
      • 2014-04-20
      • 2015-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多