如何使用foreach循环修改数组值?

How to modify array value using foreach loop?

我正在尝试使用 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"

我只想更改数组值并保持相同的格式。我该怎么做?

要获得所需的数组结构,请在 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);

您使用的语法 $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;
}