// 필터링할 배열
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 개발자가 직접 작성한 콜백 함수
function isEven($value) {
    return $value % 2 == 0; // 짝수인 경우 true 반환
}

// 필터링된 배열로 반환
$evenNumbers = array_filter($numbers, 'isEven');

print_r($evenNumbers);
/*
출력: 원본 배열의 키(인덱스)를 그대로 유지
    Array
    (
		[1] => 2
	    [3] => 4
	    [5] => 6
	    [7] => 8
	    [9] => 10
    )
*/
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
/**
 * 콜백 함수
 *
 * @param mixed $element 배열의 각 요소
 * @return bool 필터링 조건을 충족하면 true, 그렇지 않으면 false 반환
 *
 * 기명 함수(사용자 정의 함수)나 익명 함수 등으로 사용할 수 있습니다.
 */


/* 콜백 함수를 기명 함수를 사용할 경우 */
function callback($element) { // 기명 함수 정의
	// 필터링할 로직: 필터링된 결과를 반환해야 합니다.
}

array_filter($array, 'callback'); // 정의한 기명 함수명을 매개변수에 문자열로 직접 전달

/* 콜백 함수를 익명 함수로 사용할 경우 */
array_filter($array, function($element) {
	// 필터링할 로직: 필터링된 결과를 반환해야 합니다.
});
// 필터링할 배열
$numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];

// 개발자가 직접 작성한 콜백 함수
function isEven($value) {
    return $value % 2 == 0; // 짝수인 경우 true 반환
}

// 필터링된 배열로 반환
$evenNumbers = array_filter($numbers, 'isEven');

print_r($evenNumbers);
/*
출력: 원본 배열의 키(인덱스)를 그대로 유지
    Array
    (
		[1] => 2
	    [3] => 4
	    [5] => 6
	    [7] => 8
	    [9] => 10
    )
*/

// 주의사항: 필터링된 배열에서의 인덱스 처리
var_dump($even_numbers[0]); // null
$data = ['apple', '', 'banana', null, 'cherry'];

// 빈 값 제거
$filteredData = array_filter($data); // 콜백 함수를 제공하지 않았을 경우

// 결과 출력
print_r($filteredData);
$array = ["apple", "banana", "cat", "dog", "elephant"];

$strings_starting_with_a = array_filter($array, function ($string) {
	return $string[0] == "a";
});

print_r($strings_starting_with_a);
/*
출력:
    Array
    (
		[0] => apple
    )
*/
$data = ['apple', '', 'banana', null, 'cherry'];

// 빈 값을 제거하는 콜백 함수를 제공
$filteredData = array_filter($data, function ($value) {
    return !empty($value);
});

// 결과 출력
print_r($filteredData);
/*
출력:
    Array
    (
		[0] => apple
	    [2] => banana
	    [4] => cherry
    )
*/
$scores = [
    'Alice' => 85,
    'Bob' => 92,
    'Carol' => 78,
    'David' => 95
];

// 점수가 90 이상인 학생 필터링
$topScorers = array_filter($scores, function ($value) {
    return $value >= 90;
});

// 결과 출력
print_r($topScorers);
/*
출력:
    Array
    (
		[Bob] => 92
	    [David] => 95
    )
*/