【问题标题】:How to reset array index after unset key in foreach loop in php?php中foreach循环中未设置键后如何重置数组索引?
【发布时间】:2021-06-08 06:21:46
【问题描述】:

我正在使用unset 根据我的条件从数组中删除特定对象。但是在取消设置之后,我得到的是一个对象而不是一个数组。我尝试使用array_values 重新排列索引,但它对我不起作用。请帮我解决这个问题。以下是我的代码:

$empId = '100'; //just for example.
foreach($jsonData['data'] => $key as $value){
    if($value['emp_id'] == $empId){
        unset($jsonData['data][$key]);
    }
}
after loop code//
return $jsonData;

在未设置数据后,它给了我一个对象。我试过array_valuesarray_merge,但它对我不起作用。 我试图用unset 替换array_splice,但它没有删除数据。

【问题讨论】:

  • 取消设置数组元素不能生成对象。请分享所有相关代码(如何解码 JSON 以及在此循环后取消设置元素的任何更改)。
  • 使用 json_decode(json_encode($data),true);在 foreach 循环之前@El_Vanja

标签: php foreach unset


【解决方案1】:

您的代码中至少有 2 个严重的语法错误。

它应该是这样的:

<?php

// Some dummy data
$empId = '100';
$jsonData = [];
$jsonData['data'] = [
    'key' => ['emp_id' => 'value'],
    'key2' => ['emp_id' => '100']
];

// Fixed foreach loop
foreach($jsonData['data'] as $key => $value) {
    if ( $value['emp_id'] == $empId ) {
        unset( $jsonData['data'][ $key ] );
    }
}

print_r($jsonData);

【讨论】:

    【解决方案2】:

    key emp_id 是字符串,而不是索引。 您的代码未设置 emp_id。 或者,您可以使用 array_map 函数,然后使用 array_values 重新索引您的数组。

    【讨论】:

      猜你喜欢
      • 2023-03-06
      • 1970-01-01
      • 2013-10-23
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 2012-05-02
      • 2017-10-09
      相关资源
      最近更新 更多