【问题标题】:How to modify array value using foreach loop?如何使用 foreach 循环修改数组值?
【发布时间】:2021-10-17 16:04:00
【问题描述】:

我正在尝试使用 foreach 循环修改数组内的值,这里是数组内容

folders: [{id: "4", sysUser_id: "1", department_id: "0", foldername: "Auditors Files", parent_id: "0"},…]

0: {id: "4", sysUser_id: "1", department_id: "0", foldername: "Auditors Files", parent_id: "0"}
    department_id: "0"
    foldername: "Auditors Files"
    id: "4"
    parent_id: "0"
    sysUser_id: "1"
1: {id: "3", sysUser_id: "1", department_id: "0", foldername: "Computer Components", parent_id: "0"}
    department_id: "0"
    foldername: "Computer Components"
    id: "3"
    parent_id: "0"
    sysUser_id: "1"
2: {id: "2", sysUser_id: "1", department_id: "0", foldername: "Internal Auditors", parent_id: "0"}
    department_id: "0"
    foldername: "Internal Auditors"
    id: "2"
    parent_id: "0"
    sysUser_id: "1"
3: {id: "1", sysUser_id: "1", department_id: "0", foldername: "IT Audit", parent_id: "0"}
    department_id: "0"
    foldername: "IT Audit"
    id: "1"
    parent_id: "0"
    sysUser_id: "1"

我想做的是像这样修改所有的 id 值

$reconstruct = array();
foreach($result['folders'] as $folder){
   $reconstruct['id'][] = $this->my_encryption->urlEncrypt($folder->id);
   $reconstruct['sysUser_id'][] = $this->my_encryption->urlEncrypt($folder->sysUser_id);
   $reconstruct['department_id'][] = $this->my_encryption->urlEncrypt($folder->department_id);
   $reconstruct['foldername'][] = $folder->foldername;
   $reconstruct['parent_id'][] = $this->my_encryption->urlEncrypt($folder->parent_id);
}
$try['folders'] = $reconstruct;
echo json_encode($try);

但是输出变成了这样

folders: {id: ["OElkUTBtK3FLZElwZm52ekhoSnZudz09OjpZBMuJMlf1iSHwxTeJncvP",…],…}
  department_id: ["OE1Gb0xDK3BzNllzMjltVTVEZ3VwQT09OjoKbrlVvBKoPd5GiomYTreX",…]
    0: "OE1Gb0xDK3BzNllzMjltVTVEZ3VwQT09OjoKbrlVvBKoPd5GiomYTreX"
    1: "N3ZnK1V4MFZlckNFa0NzMytIREt1Zz09OjqzdSvYf1H6z21oWM_g2f8K"
    2: "eUdkYmxHKzZkSmlsbEZXL2c0K250QT09OjoSE0DgI8sd2ho9JWDAsaSw"
    3: "cXM5WlpqcjdjS0VncFNWOVJreUNrZz09OjrC-NAeGAPthrfrH-SG9sx8"
  foldername: ["Auditors Files", "Computer Components", "Internal Auditors", "IT Audit"]
    0: "Auditors Files"
    1: "Computer Components"
    2: "Internal Auditors"
    3: "IT Audit"
  id: ["OElkUTBtK3FLZElwZm52ekhoSnZudz09OjpZBMuJMlf1iSHwxTeJncvP",…]
    0: "OElkUTBtK3FLZElwZm52ekhoSnZudz09OjpZBMuJMlf1iSHwxTeJncvP"
    1: "Vlh4NVZmQlQxNjRSUWpsclc4SUtwZz09OjpwQRLcA_b90a8QT6mc4vxN"
    2: "VGZwVlBrcmdEVUQzMzFMby9vdVQvdz09Ojrwdaqei86MQsuNRn-SOAYR"
    3: "ZXlSUmNKRFMvWFFSRW90T240WEovUT09OjotEXan6A0ZO3lUBW0ae-N3"
  parent_id: ["cXUvcWRtM0xKM2lSdXR3dTB2bkkvZz09Ojq7vtCUxphCBQya72IILSOO",…]
    0: "cXUvcWRtM0xKM2lSdXR3dTB2bkkvZz09Ojq7vtCUxphCBQya72IILSOO"
    1: "WFlvemlZcm1oT2ZTTy9sVUJLbzlyZz09OjpYmqeY8CWXnmn-l1sqMxHq"
    2: "c2FHUmIrZ1J5OGpDT01hRFlxOVJVdz09OjpOa5sIP8BGWJpy9ZmA2ZUI"
    3: "S1YyRHc1WWlMKzZMaTBQbUc0NmxkZz09OjqYj_cEXN1s75Vwimy9GZ6j"
  sysUser_id: ["UjIxZ1hMR3dvd3BISVpnNjVkVk9tdz09OjrUK5qhxu0Mp4vvTN5YA4Eo",…]
    0: "UjIxZ1hMR3dvd3BISVpnNjVkVk9tdz09OjrUK5qhxu0Mp4vvTN5YA4Eo"
    1: "UGRwb0RYRUd5N3BrVTV0VDUrS0tkdz09OjpQo2CVXk28hUGGfrBVScq7"
    2: "V3hXWGhoRWRyT01oQjdwV3hsUFVPZz09OjoxHbsRPJhSLQBEJKoBTAgB"
    3: "cUd1UDRDR1VMZmh1d2tsU0FQaXlUQT09Ojq57rc7RIQMOaKN3NQfVGVa"

我想要的只是更改数组值并且仍然具有相同的格式。我该怎么做?

【问题讨论】:

  • 您能描述一下预期的结果吗?你似乎没有改变任何东西;相反,您正在创建一个新数组,其中包含 id、部门 id 等键。鉴于您的代码,输出数组的结构是正确的 - $reconstruct['id'][] 如果您想修改某些内容,为什么不在同一个数组中进行而不是创建一个新数组?
  • 我想获得与原样相同的输出。或者您可以在我发布的第一个代码的顶部看到它。而且我正在使用 codeigniter 我只是返回数组,这就是为什么我不能在同一个数组中更改它。

标签: php arrays json loops foreach


【解决方案1】:

要实现所需的数组结构,请在 for 循环中创建一个新数组,向其中添加键和值,然后将新数组推送到 $reconstruct。我希望下面的代码有用-

<?php

$reconstruct = [];
foreach ($result['folders'] as $folder) {
    $updated_folder = [];
    $updated_folder['id'] = $this->my_encryption->urlEncrypt($folder->id);
    $updated_folder['sysUser_id'] = $this->my_encryption->urlEncrypt($folder->sysUser_id);
    $updated_folder['department_id'] = $this->my_encryption->urlEncrypt($folder->department_id);
    $updated_folder['foldername'] = $folder->foldername;
    $updated_folder['parent_id'] = $this->my_encryption->urlEncrypt($folder->parent_id);
    $reconstruct[] = $updated_folder;
}
echo json_encode($reconstruct);

【讨论】:

    【解决方案2】:

    您使用的语法$ArrayName[index][] = value 是将一个值附加到名为$ArrayName[index] 的数组的末尾。您想要的是为每个原始数组创建一个新数组,如下所示:

    $reconstruct = array();
    foreach($result['folders'] as $folder){
       $newArray = [];
       $newArray['id'] = $this->my_encryption->urlEncrypt($folder->id);
       $newArray['sysUser_id'] = $this->my_encryption->urlEncrypt($folder->sysUser_id);
       $newArray['department_id'] = $this->my_encryption->urlEncrypt($folder->department_id);
       $newArray['foldername'] = $folder->foldername;
       $newArray['parent_id'] = $this->my_encryption->urlEncrypt($folder->parent_id);
    
       $reconstruct[] = $newArray;
    }
    

    【讨论】:

      猜你喜欢
      • 2021-08-03
      • 2019-03-09
      • 2013-04-26
      • 2018-08-12
      相关资源
      最近更新 更多