PHP
[PHP] 2차 연관배열에서 특정 필터순서로 배열 요소 재정렬하기
http://portfolio.wonpaper.net
2024. 4. 26. 02:00
실무에서 많이 필요한 경우가 많다.
배열내의 요소들중에서 필터링하여 특정 요소 순서로 전체 배열 요소를 뿌려 주고 싶을때,
[1번 방법]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<?
// 주어진 배열
$arrangeArr = array(
array('no' => 2, 'place' => 'place02', 'e_type_' => '기획', 'event_title' => "안녕하세요"),
array('no' => 12, 'place' => 'place05', 'e_type_' => '운영', 'event_title' => "행사있어요"),
array('no' => 1, 'place' => 'place01', 'e_type_' => '기획', 'event_title' => "테스트1"),
array('no' => 5, 'place' => 'place02', 'e_type_' => '행사', 'event_title' => "고고싱"),
array('no' => 22, 'place' => 'place04', 'e_type_' => '기획', 'event_title' => "건강하세요"),
array('no' => 4, 'place' => 'place11', 'e_type_' => '운영', 'event_title' => "우유주세요"),
);
print_r($arrangeArr);
//var_dump($arrangeArr);
echo "<br><br>";
// 필터링할 순서
$order = array('place01', 'place02', 'place10', 'place03', 'place11', 'place04', 'place05');
// 필터링된 배열
$filteredArr = array_filter($arrangeArr, function($item) use ($order) {
return in_array($item['place'], $order);
});
// 순서대로 정렬
usort($filteredArr, function($a, $b) use ($order) {
return array_search($a['place'], $order) - array_search($b['place'], $order);
});
// 결과 출력
print_r($filteredArr);
?>
|
cs |
[2번 방법]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
<?
$arrangeArr = array(
array('no' => 2, 'place' => 'place02', 'e_type' => '기획', 'event_title' => "안녕하세요"),
array('no' => 12, 'place' => 'place05', 'e_type' => '운영', 'event_title' => "행사있어요"),
array('no' => 1, 'place' => 'place01', 'e_type' => '기획', 'event_title' => "테스트1"),
array('no' => 5, 'place' => 'place02', 'e_type' => '행사', 'event_title' => "고고싱"),
array('no' => 22, 'place' => 'place04', 'e_type' => '기획', 'event_title' => "건강하세요")
);
// 정렬 우선 순위 설정
$order = array('place01', 'place02', 'place10', 'place03', 'place11', 'place04', 'place05');
// usort()와 사용자 정의 비교 함수를 사용하여 배열을 정렬
usort($arrangeArr, function ($a, $b) use ($order) {
$indexA = array_search($a['place'], $order);
$indexB = array_search($b['place'], $order);
// 배열 $order에 없는 항목은 배열의 끝으로 간주
if ($indexA === false) $indexA = count($order);
if ($indexB === false) $indexB = count($order);
return $indexA <=> $indexB;
});
// 결과 출력
print_r($arrangeArr);
?>
|
cs |