【问题标题】:explode Array results and apply foreach分解数组结果并应用 foreach
【发布时间】:2020-12-18 06:05:08
【问题描述】:

这是我的数组,

array:2 [
  0 => "{"1":[2],"2":[1,3]}"
  1 => true
]

如何以各自的格式显示上述数组

item_id | item_value_id
   1             2
   2             1
   2             3

我尝试过使用explode,但不幸的是我无法解析b/w括号。

这是我尝试过的

        // dd(explode("[]", $value));
        // dd(preg_split('/"/', $value));
        // dd(preg_split('/(?![^][]*\])/', $value));

我没有得到预期的结果。

更新:

我将数组包裹在 json_decode 周围,我得到了

        foreach ($arrays as $key => $value) {
                    # code... 
                    $json = json_decode($value);
   
//Another foreach 
                    foreach ($json as $key => $value1) {
                        # code...
                        dd($value1);
    
                    }
                }

结果

**dd($json)**
 /**
            {#1386
              +"1": array:1 [
                0 => 2
              ]
              +"2": array:2 [
                0 => 1
                1 => 3
              ]
            }
        */

**dd($value)**

   /**
    array:1 [
      0 => 2
    ]
    **/

【问题讨论】:

  • 这看起来像 json。那么json_decode()?
  • 您是如何获得这些数据的?
  • 这是问题的后续。我试图将结果保存在数据库stackoverflow.com/questions/63638457/…@nice_dev
  • 不错。你现在很近了。只需使用 2 个嵌套循环。
  • 是的,我能够使用提供的答案保存数据。我只是修改了答案,因为逻辑相同

标签: php arrays regex laravel


【解决方案1】:

我不确定我在这里是否完全正确,但我相信这就是您所要求的:

<?php

$data = [
    0 => '{"1":[2],"2":[1,3]}',
    1 => true
];


$decoded_json = json_decode($data[0], true);


?>

<table>
    <thead>
        <th>item_id</th>
        <th>item_value_id</th>
    </thead>
    <tbody>

   <?php foreach ($decoded_json as $item_key => $item){?>
        <?php foreach ($item as $item_data){ ?>

            <tr>
                <td><?php echo $item_key?></td>
                <td><?php echo $item_data?></td>
            </tr>


        <?php }?>
    <?php } ?>
    </tbody>
</table>

【讨论】:

    【解决方案2】:

    你不能循环一个对象,除非它实现了 Countable 或 ArrayAccess 接口。 假设您的型号名称是 Model,您可以像下面这样进行批量插入:

    <?php
    
    $rows = [];
    
    $arrays = json_decode($data[0],true);
    
    foreach ($arrays as $key1 => $value) {
        foreach ($value as $key2 => $value2) {
            $rows[] = [
                'item_id' => $key1,
                'item_value_id' => $value2
            ];
        }
    }
    
    if(count($rows) > 0){
        Model::insert($rows); // bulk insert
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-07-31
      • 2017-05-03
      • 1970-01-01
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多