$.post()接收后台的数组有时是数组有时是对象

本文介绍了$.post()在接收后台数组时,有时会变为对象的情况。问题出在使用了unset()函数,这导致非最后一个索引元素的数组变成了关联数组。由于JavaScript不支持关联数组,因此关联数组会被转化为对象。解决方案是在PHP中使用array_values()函数,确保返回的是索引数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下列为返回数组给前台$.post();

 //根据电话号码查询此人历史订单
public function history()
{
    $post = input('post.');
    $re = Db('dingdan')->where('tel', $post['tel'])->select();
    foreach ($re as $key => $value) {
        if ($value['id'] == $post['id']) {
            unset($re[$key]);
        }
    }

    return $re;
}

返回结果如下:有两个总是返回对象,不知道什么原因。
在这里插入图片描述

经查资料发现,是unset()的原因,使用unset()不会改变原有数组的索引。当unset()的元素不是索引数组的最后一个元素时,处理后的数组就会变成关联数组,如下:

<?php
  $array = array(0 => "a", 1 => "b", 2 => "c");
  unset($array[1]);
        //↑ 你想删除的key
?>

输出:

Array (
[0] => a
[2] => c
)
由于javascript不支持关联数组,所以将后台传递过来的索引数组(indexed array)转为数组格式,而将关联数组(associative array)转为对象格式。

array_values() 函数返回一个包含给定数组中所有键值的索引数组,不保留键名。

所以,上述遇到的问题,在foreach后面加上array_values($re),就可以了。

参考:
PHP从数组中删除元素的四种方法实例
php 数组对象之间的转换

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值