Tôi có một mảng đa chiều mà tôi cần được sắp xếp với tính độc đáo vì tôi có các bản ghi trùng lặp, vì vậy tôi cần array_unique
để đi qua mảng và xóa các bản sao theo giá trị, ví dụ:
Array
[
[0] => Array
[
[id] => 324
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
]
[1] => Array
[
[id] => 325
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
]
[2] => Array
[
[id] => 326
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
]
]
Có sự trùng lặp time_start
, tất cả đều giống nhau, cũng level
và
Array
[
[0] => Array
[
[id] => 324
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
]
]
0 nhưng chúng không bị ảnh hưởng, chỉ khi có sự phù hợp time_start
nên loại bỏ nó và xử lý toàn bộ mảng [mảng lớn hơn bạn nghĩ, nhưng tôi Chỉ cần đăng một ví dụ nhỏ về mảng]. Nên loại bỏ các bản sao và trả lại như thế này:Array
[
[0] => Array
[
[id] => 324
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
]
]
Những câu hỏi tôi thấy không hoạt động:
- Định dạng lại mảng đa chiều dựa trên giá trị
- Xóa phần tử khỏi mảng đa chiều dựa trên giá trị
Khi được hỏi ngày 19 tháng 5 năm 2011 lúc 10:22May 19, 2011 at 10:22
0
$input = array[ /* your data */ ];
$temp = array[];
$keys = array[];
foreach [ $input as $key => $data ] {
unset[$data['id']];
if [ !in_array[$data, $temp] ] {
$temp[] = $data;
$keys[$key] = true;
}
}
$output = array_intersect_key[$input, $keys];
hoặc
$input = array[ /* your data */ ];
$temp = $input;
foreach [ $temp as &$data ] {
unset[$data['id']];
}
$output = array_intersect_key[$input, array_unique[$temp]];
Đã trả lời ngày 19 tháng 5 năm 2011 lúc 10:29May 19, 2011 at 10:29
Hszhszhsz
Phù bằng vàng 145K5858 gold badges254 silver badges308 bronze badges
5
$temp = array[];
array_filter[$yourArray, function [$v] use [&$temp] {
if [in_array[$v['time_start'], $temp]] {
return false;
} else {
array_push[$temp, $v['time_start']];
return true;
}
}];
Sử dụng
Array
[
[0] => Array
[
[id] => 324
[time_start] => 1301612580
[level] => 0.002
[input_level] => 0.002
]
]
2 sẽ lọc một mảng dựa trên kết quả của một cuộc gọi lại [tôi đã sử dụng hàm ẩn danh có thể được sử dụng kể từ Php 5.3]. Các giá trị time_start
được thu thập thành một mảng tạm thời.Đã trả lời ngày 19 tháng 5 năm 2011 lúc 10:42May 19, 2011 at 10:42
Kapakapakapa
76.3K20 Huy hiệu vàng157 Huy hiệu bạc174 Huy hiệu đồng20 gold badges157 silver badges174 bronze badges
1
Tôi nghĩ bạn sẽ phải đi bộ nó:
$usedVals = array[];
$outArray = array[];
foreach [$targetArray as $arrayItem]
{
if [!in_array[$arrayItem['time_start'],$usedVals]]
{
$outArray[] = $arrayItem;
$usedVals[] = $arrayItem['time_start'];
}
}
return $outArray;
Đã trả lời ngày 19 tháng 5 năm 2011 lúc 10:30May 19, 2011 at 10:30
John Greenjohn GreenJohn Green
13.1k3 Huy hiệu vàng27 Huy hiệu bạc51 Huy hiệu Đồng3 gold badges27 silver badges51 bronze badges
1
$uniq = array[];
foreach[$no_unique as $k=>$v] if[!isset[$uniq[$v['time_start']]]] $uniq[$v['time_start']] = $v;
$uniq = array_values[$uniq];
Đã trả lời ngày 19 tháng 5 năm 2011 lúc 10:30May 19, 2011 at 10:30
John Greenjohn GreenDanzan
13.1k3 Huy hiệu vàng27 Huy hiệu bạc51 Huy hiệu Đồng5 silver badges8 bronze badges