관리 메뉴

웹개발자의 기지개

[PHP] 2차 연관배열에서 특정 필터순서로 배열 요소 재정렬하기 본문

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($arrangeArrfunction($item) use ($order) {
    return in_array($item['place'], $order);
});
 
// 순서대로 정렬
usort($filteredArrfunction($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($arrangeArrfunction ($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

 

 

 

 

 

Comments