You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何设置数组中各sendby值最后出现项的last字段为1?

嘿,这个需求我之前也碰到过,给你分享两种靠谱的PHP实现方式,按需选就行~

方法一:逆向遍历标记法

这个思路特别直观,从数组末尾往前找,遇到的第一个某sendby值就是它最后出现的实例,直接标记,后面再碰到同sendby的就设为0:

  1. 先建一个空数组用来记录已经处理过的sendby ID
  2. 从数组最后一位开始倒序遍历
  3. 每遇到一个元素:
    • 如果这个sendby还没被记录过,就把它的last设为1,同时把sendby加入记录数组
    • 如果已经记录过,就把last设为0
  4. 最后把处理后的数组反转回原顺序(因为我们是倒着遍历的)

代码示例:

$originalArray = [
    ['sendby' => 3, 'refresh' => 0, 'last' => 0],
    ['sendby' => 3, 'refresh' => 1, 'last' => 1],
    ['sendby' => 8, 'refresh' => 1, 'last' => 1],
];

$processed = [];
$seenSendbys = [];

// 从数组末尾开始倒序遍历
for ($i = count($originalArray) - 1; $i >= 0; $i--) {
    $item = $originalArray[$i];
    if (!in_array($item['sendby'], $seenSendbys)) {
        $item['last'] = 1;
        $seenSendbys[] = $item['sendby'];
    } else {
        $item['last'] = 0;
    }
    // 把处理后的元素放到结果数组开头,保持原顺序
    array_unshift($processed, $item);
}

// 输出结果
print_r($processed);

这个方法的好处是逻辑简单,新手也能快速理解,适合数组规模不大的场景。

方法二:先统计最后位置,再批量设置

如果你的数组比较大,这个方法效率会更高——先一次性统计每个sendby最后出现的下标,再遍历数组对比设置:

  1. 第一次遍历数组,用一个关联数组记录每个sendby对应的最后出现下标(后面的下标会覆盖前面的,最后存的就是最末尾的位置)
  2. 第二次遍历数组,判断当前元素的下标是不是该sendby的最后下标,是就设last=1,否则设为0

代码示例:

$originalArray = [
    ['sendby' => 3, 'refresh' => 0, 'last' => 0],
    ['sendby' => 3, 'refresh' => 1, 'last' => 1],
    ['sendby' => 8, 'refresh' => 1, 'last' => 1],
];

// 第一步:统计每个sendby最后出现的下标
$lastIndices = [];
foreach ($originalArray as $index => $item) {
    $lastIndices[$item['sendby']] = $index;
}

// 第二步:遍历数组设置last字段(用引用直接修改原数组)
foreach ($originalArray as $index => &$item) {
    $item['last'] = ($index === $lastIndices[$item['sendby']]) ? 1 : 0;
}
unset($item); // 解除引用,避免后续操作污染数组

// 输出结果
print_r($originalArray);

这个方法只需要两次线性遍历,比方法一的array_unshift(每次操作都是O(n)复杂度)要高效得多,适合处理大数组。

小提示

  • 如果数组里的元素是对象,只需要把$item['sendby']改成$item->sendby这种属性访问方式就行
  • 不管sendby是数字还是字符串,这两种方法都能正常工作

内容的提问来源于stack exchange,提问作者Lokiyou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:18:59