我有一个Json数组,值如下:
[small, medium, small, large, medium, medium, large, small]
我想只得到这个数组:
[small, medium, large]
每个值在第一个数组的第二个数组中只使用一次。
foreach($json_array as $json_arr){
if (!isset($size_array)) {
$size_array = array();
}
foreach($size_array as $s_a) {
if ($s_a != $json_arr['size']) {
$x = true;
}
}
$size_array[] = $json_arr['size'];
}
echo "<br><br><br>";
foreach($size_array as $s_a) {
echo $s_a;
}
[{"size":"small"},{"size":"small"},{"size":"medium"},{"size":"medium"},{"size":"large"},{"size":"small"},{"size":"large"},{"size":"large"},{"size":"large"}]
您给定的json
格式不正确。我创建了一个示例,以便您更好地理解:-
<?php
$json = '{"0":"small","1":"medium","2":"small","3":"large","4":"medium","5":"medium","6":"large","7":"small"}';
$new_array = json_decode($json);
$common_array = array();
foreach($new_array as $new_arr){
$common_array[] = $new_arr;
}
echo "<pre/>";print_r($common_array);
echo "<pre/>";print_r(array_unique($common_array));
?>
输出:https://eval.in/393669
注意:-我已经采取了json格式。将其修改为正确的,并以此为例。我希望这很容易理解。谢谢。
根据你最新的json格式编辑,这里的链接,其中有正确的答案:-
https://eval.in/393680您可以组合array_column来提取size的值,然后在其上运行array_unique。
$size_array = array_unique(array_column($json_array, "size"));
如果你想,你可以得到原始数组的所有键,但只有唯一的大小。
$uniques = array_intersect_key($json_array, $size_array);
如果你的php版本没有array_column
函数
$str = '[{"size":"small"},{"size":"small"},{"size":"medium"},{"size":"medium"},{"size":"large"},{"size":"small"},{"size":"large"},{"size":"large"},{"size":"large"}]';
$json_array = json_decode($str, true);
$ss = array(); // list of sizes. Realy it is the result too
// but array has structure as [ smal, medium, large ]
$new = array_filter($json_array,
function ($item) use (&$ss) {
if (in_array($item['size'], $ss)) return false;
else { $ss[] = $item['size'];}
return true;
} );
print_r($new);
结果Array
(
[0] => Array ( [size] => small )
[2] => Array ( [size] => medium )
[4] => Array ( [size] => large )
)