加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在array_unique函数作为JSON响应中的对象返回后的数组

发布时间:2020-12-13 18:23:05 所属栏目:PHP教程 来源:网络整理
导读:我试图合并两个数组,省略重复的值,并使用Slim框架将其作为 JSON返回.我做了以下代码,但结果我得到了JSON的唯一属性作为对象 – 而不是数组.我不知道为什么会这样,我想避免它.我该怎么做? 我的代码: $galleries = array_map(function($element){return $ele
我试图合并两个数组,省略重复的值,并使用Slim框架将其作为 JSON返回.我做了以下代码,但结果我得到了JSON的唯一属性作为对象 – 而不是数组.我不知道为什么会这样,我想避免它.我该怎么做?

我的代码:

$galleries = array_map(function($element){return $element->path;},$galleries);
$folders = array_filter(glob('../galleries/*'),'is_dir');

function transformElems($elem){
    return substr($elem,3);
}           
$folders = array_map("transformElems",$folders);

$merged = array_merge($galleries,$folders);
$unique = array_unique($merged); 

$response = array(
  'folders' => $dirs,'galleries' => $galleries,'merged' => $merged,'unique' => $unique);
echo json_encode($response);

作为JSON响应,我得到:

{
folders: [] //array
galleries: [] //array
merged: [] //array
unique: {} //object but should be an array
}

似乎array_unique返回了一些奇怪的东西,但是原因是什么?

array_unique从数组中删除重复的值,但保留了数组键.

所以像这样的数组:

array(1,2,3)

将被过滤为此

array(1,3)

但值“3”将保持其键为“3”,因此得到的数组确实是

array(0 => 1,1 => 2,3 => 3)

并且json_encode无法将这些值编码为JSON数组,因为没有空洞时键不是从零开始.能够恢复该数组的唯一通用方法是为其使用JSON对象.

如果要始终发出JSON数组,则必须对数组键重新编号.一种方法是将数组与空数组合:

$nonunique = array(1,3);
$unique = array_unique($nonunique);
$renumbered = array_merge($unique,array());

json_encode($renumbered);

另一种方法是让array_values为你创建一个新的连续索引数组:

$nonunique = array(1,3);
$renumbered = array_values(array_unique($nonunique));

json_encode($renumbered);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读