我试图合并两个数组省略重复的值,并将其作为一个JSON与Slim框架返回.我做了以下代码,但结果我得到unique
了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);
Run Code Online (Sandbox Code Playgroud)
作为JSON响应,我得到:
{
folders: [] //array
galleries: [] //array
merged: [] //array
unique: {} //object but should be an array
}
Run Code Online (Sandbox Code Playgroud)
似乎array_unique
返回了一些奇怪的东西,但是原因是什么?
Sve*_*ven 24
array_unique
从数组中删除重复的值,但保留数组键.
所以像这样的数组:
array(1,2,2,3)
Run Code Online (Sandbox Code Playgroud)
将被过滤为这个
array(1,2,3)
Run Code Online (Sandbox Code Playgroud)
但值"3"将保持其键为"3",因此生成的数组确实如此
array(0 => 1, 1 => 2, 3 => 3)
Run Code Online (Sandbox Code Playgroud)
并且json_encode
无法将这些值编码为JSON数组,因为没有空洞时键不是从零开始.能够恢复该数组的唯一通用方法是为其使用JSON对象.
如果要始终发出JSON数组,则必须对数组键重新编号.一种方法是将数组与空数组合:
$nonunique = array(1,2,2,3);
$unique = array_unique($nonunique);
$renumbered = array_merge($unique, array());
json_encode($renumbered);
Run Code Online (Sandbox Code Playgroud)
另一种实现方法是让array_values为您创建一个新的连续索引数组:
$nonunique = array(1,2,2,3);
$renumbered = array_values(array_unique($nonunique));
json_encode($renumbered);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2501 次 |
最近记录: |