【问题标题】:Restore array items after every iteration in PHP在 PHP 中每次迭代后恢复数组项
【发布时间】:2020-06-27 17:43:57
【问题描述】:

我试图在每次 for 循环迭代后恢复所有数组项。这个我需要设置 Laravel 验证Rule::notIn($arry)

我有一个由克隆的输入字段生成的station_id 数组。我想检查所有克隆的车站 id 是否都是唯一的,因此请确保地铁路线中没有重复的车站。

对于克隆的字段,我通过计算克隆的项目来设置使用 for 循环的规则。

所以问题是,我想使用 `Rule::notIn($stationIds) 除了当前迭代项 id,因此我可以通过检查当前 id 不在数组项的其余部分中来进行验证。

public function rules()
{
    
    // getting all input fields value
    $rStationIds = $this->get('station_id')
    ...

    // get the max number of input
    $counter = $this->getMaxCount($rStationIds, ...);
    $rules = [];

    // loop through each item
    for ($r = 0; $r < $counter; $r++) {
              
        unset($rStationIds[$r]);

        $rules['station_id'][$r] = ['required', 'int', Rule::notIn($rStationIds)];
    }

    ...
}

上面代码中的问题是,当我unset($var)当前项时,它永远不会用原始数组元素重置;因此,最后一个字段将没有可比较的内容,因为数组将为空。

我也可以使用任何其他方法来检查克隆站 id 字段的唯一项目。

【问题讨论】:

  • 怎么样:0. new temp var 与当前元素的值 1. 取消设置当前元素 2. notIn(array) 3. array[] = new temp var 请参阅下面的答案。

标签: php arrays laravel laravel-validation


【解决方案1】:

将循环更改为:

// loop through each item
for ($r = 0; $r < $counter; $r++) {
    $temp = $rStationIds[$r];

    unset($rStationIds[$r]);

    $rules['station_id'][$r] = ['required', 'int', Rule::notIn($rStationIds)];

    $rStationIds[$r] = $temp;
}

【讨论】:

  • 可能有更好的解决方案,但这是我想出的最简单的方法。
  • 谢谢。这个解决方案可以解决我的问题,因为我需要在每次交互时将所有元素都放回数组中。但是,我想知道是否有任何方法可以使用原始索引恢复整个数组。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2018-09-01
  • 2011-05-04
  • 2018-02-21
  • 2019-11-29
  • 2016-04-09
  • 1970-01-01
  • 2023-03-13
  • 1970-01-01
相关资源
最近更新 更多