【问题标题】:Updating a multidimensional array in laravel在 laravel 中更新多维数组
【发布时间】:2020-12-31 16:25:52
【问题描述】:

我需要一些关于如何在 PHP 中更新多维数组的帮助。我正在使用以下数组来更新图像网格。我的图像数量不同。首先我上传并调整我的图像大小,然后将它们作为 Json 保存在数据库中的images 字段中。我将图像大小默认设置为 300 并将其保存在thumb 字段中。这是我将其存储在数据库中的 json 图像字段:

[
  {
    "images": {
      "300": "/storage/uploads/300.1.png",
      "600": "/storage/uploads/600.1.png",
      "900": "/storage/uploads/900.1.png",
      "original": "/storage/uploads/1.png"
    },
    "thumb": "/storage/uploads/300.1.png"
  },
  {
    "images": {
      "300": "/storage/uploads/300.2.png",
      "600": "/storage/uploads/600.2.png",
      "900": "/storage/uploads/900.2.png",
      "original": "/storage/uploads/2.png"
    },
    "thumb": "/storage/uploads/300.2.png"
  },
  {},
  {}
]

例如,假设我想编辑第二张图片的大小,并将其从 300 更改为 600。这是我从编辑表单中得到的请求日志。

array:3 [▼
  "_token" => "wZSerggegrgL1lcbhWZFwerfwerfwerfVx"
  "_method" => "patch"
  "imagesThumb" => array:4 [▼
    "/storage/uploads/300.1.png" => "/storage/uploads/300.1.png"
    "/storage/uploads/300.2.png" => "/storage/uploads/600.2.png"
    "/storage/uploads/300.3.png" => "/storage/uploads/300.3.png"
    "/storage/uploads/300.4.png" => "/storage/uploads/300.4.png"
  ]
]

如何更新第二张图片的缩略图?

【问题讨论】:

    标签: php arrays multidimensional-array


    【解决方案1】:

    您可以使用以下解决方案。这是通过使用array_flip() 函数完成的。将 address_to_json_file 替换为您的 json 数据的地址。

    $request = [
        "/storage/uploads/files/2020/ads/images/300_2020_12_25_26b48.1.png" => "/storage/uploads/files/2020/ads/images/300_2020_12_25_26b48.1.png",
        "/storage/uploads/files/2020/ads/images/300_2020_12_25_12567.2.png" => "/storage/uploads/files/2020/ads/images/600_2020_12_25_12567.2.png",
        "/storage/uploads/files/2020/ads/images/300_2020_12_25_6da51.4.png" => "/storage/uploads/files/2020/ads/images/300_2020_12_25_6da51.4.png",
        "/storage/uploads/files/2020/ads/images/300_2020_12_25_65509.png"   => "/storage/uploads/files/2020/ads/images/300_2020_12_25_65509.png",
    ];
    $sample_json = json_decode(address_to_json_file, true);
    
    for ($i = 0; $i < count($request); $i++) {
        $flipped_arr = array_flip($sample_json[$i]['images']);
        foreach ($flipped_arr as $new_key => $original_key) {
            if (!empty($request[$new_key]) && $new_key != $request[$new_key]) {
                $sample_json[$i]['images'] = $request[$new_key];
            }
        }
    }
    
    dd($sample_json);
    

    【讨论】:

    • address_to_json_file 是什么意思?您的意思是作为数据库的数组。 @babak-ashrafi
    • 是的。 json 数据。我花了几分钟解决你的问题,请不要浪费它。
    • 我有错误 => json_decode() 期望参数 1 是字符串,给定数组
    • 我试过这段代码,但不起作用。 $sample_json 是数据库中的相同数据,拇指从未改变。` $sample_json = $advertisement->images; for ($i = 0; $i $original_key) { if (!empty($request[$new_key]) && $new_key != $request[$new_key]) { $sample_json[$i]['images'][ $original_key] = $request[$new_key]; } } } dd($sample_json); `
    • 我在 if 之前记录此代码 dd(!empty($request[$new_key]) &amp;&amp; $new_key != $request[$new_key]); 并返回 false
    猜你喜欢
    • 2015-06-11
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多