cup*_*kob 3 php arrays behavior unique
我正在使用以下代码来输出数组:
echo "======output without array_unique=====";
var_dump($selected);
echo "=====output with array_unique=====";
var_dump(array_unique($selected));die;
Run Code Online (Sandbox Code Playgroud)
输出是:
======output without array_unique=====
array
0 =>
array
'uri' => string 'http://localhost/conferences/tags/0caf4c990e0a385156b33fee58e7e3fb' (length=63)
'tag' => string '1' (length=1)
'weight' => float 4
'selected' => string 'select' (length=6)
1 =>
array
'uri' => string 'http://localhost/conferences/tags/0caf4c990e0a385156b33fee58e7e3fb' (length=63)
'tag' => string '1' (length=1)
'weight' => float 4
'selected' => string 'select' (length=6)
2 =>
array
'uri' => string 'http://localhost/conferences/tags/ffc709d5131f752df8aae22d7da4240f' (length=63)
'tag' => string '2' (length=1)
'weight' => float 4
'selected' => string '' (length=0)
3 =>
array
'uri' => string 'http://localhost/conferences/tags/035c60c7f090412cc905cee008fbeba8' (length=63)
'tag' => string '3' (length=1)
'weight' => float 0
'selected' => string '' (length=0)
4 =>
array
'uri' => string 'http://localhost/conferences/tags/4137dbc16ef1a2079eb6cacb62dd8521' (length=63)
'tag' => string '4' (length=1)
'weight' => float 0
'selected' => string '' (length=0)
=====output with array_unique=====
array
0 =>
array
'uri' => string 'http://localhost/conferences/tags/0caf4c990e0a385156b33fee58e7e3fb' (length=63)
'tag' => string '1' (length=1)
'weight' => float 4
'selected' => string 'select' (length=6)
Run Code Online (Sandbox Code Playgroud)
有人可以解释一下,为什么我只使用array_unique中的一个元素获得数组?
Pau*_*xon 11
数组元素被转换为字符串以进行比较 - 这是array_unique手册页中的相关片段
注意:当且仅当(字符串)$ elem1 ===(字符串)$ elem2时,两个元素被认为是相等的.用文字表示:当字符串表示相同时.将使用第一个元素.
一旦你的数组元素被转换为字符串,它们只有值"Array",当然这使得每个元素看起来都是一样的,而你最终只得到了第一个元素.
这是一种可以从像你这样的数组中删除重复项的方法
$seen=array();
foreach ($myarray as $key=>$val) {
if (isset($seen[$val['uri']])) {
unset($myarray[$key]); // remove duplicate
} else {
$seen[$val['uri']]=$key; // remember this
}
}
unset($seen); // don't need this any more
Run Code Online (Sandbox Code Playgroud)