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

下列为返回数组给前台$.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;
}

返回结果如下:有两个总是返回对象,不知道什么原因。
$.post()接收后台的数组有时是数组有时是对象 经查资料发现,是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 数组对象之间的转换