2016-09-17 6 views
2

맞춤 정렬 기능을 쓰고 있습니다. 현재 (작동하지 않는) 코드는 다음과 같습니다.PHP가 포함 된 중첩 함수

<?php 
function sort_by_key($array, $key) { 

    function custom_compare ($a, $b) { 
    if ($a[$key][0] > $b[$key][0]) { return 1; } 
    else { return -1; } 
    } 
    return usort($array, "custom_compare"); 
} 
?> 

문제는 $ key 변수를 custom_compare 함수에 전달할 수 없다는 것입니다. 전역 변수 (못생긴 코딩) 사용을 피하고 싶습니다.

<?php 
function sort_by_key($array, $key) { 

    $custom_compare = function ($a, $b) use ($key) { 
    if ($a[$key][0] > $b[$key][0]) { return 1; } 
    else { return -1; } 
    }; 

    return usort($array, $custom_compare); 
} 

기존 기능의 작은 수정을 바탕으로 :

+0

나는 PHP가 중첩 된 기능을 지원하지 않는 것으로 나타났습니다 추가 읽기와

은 또한 당신의 기능은 여전히 ​​작은 변화를 필요로한다. 내 코드는 두 번째 실행시 오류를 반환하고 PHP는 custom_compare -function을 다시 선언하려고 시도합니다. 전역 변수 이외에 다른 옵션이 있습니까? usort가 사용하기 때문에 custom_compare에 더 많은 인수를 전달할 수 없습니다. – ex4

답변

3

테스트되지 않은,하지만 당신은 익명 함수를 사용할 수 있습니다.

<?php 
function sort_by_key(&$array, $key) { 
    $custom_compare = function ($a, $b) use ($key) { 
     if ($a[$key][0] > $b[$key][0]) { 
      return 1; 
     } else { 
      return -1; 
     } 
    }; 

    usort($array, $custom_compare); 
} 

$array = array(
    array(
     'foo' => array(
      2 
     ) 
    ), 
    array(
     'foo' => array(
      3 
     ) 
    ), 
    array(
     'foo' => array(
      1 
     ) 
    ) 
); 

sort_by_key($array, 'foo'); 
var_export($array); 

출력 :

array (
    0 => 
    array (
    'foo' => 
    array (
     0 => 1, 
    ), 
), 
    1 => 
    array (
    'foo' => 
    array (
     0 => 2, 
    ), 
), 
    2 => 
    array (
    'foo' => 
    array (
     0 => 3, 
    ), 
), 
) 
+0

답장을 보내 주셔서 감사하지만 작동하지 않습니다. 대신에 다음과 같은 오류가 발생합니다 :'PHP 구문 분석 오류 : '{'' – ex4

+0

을 기대하는 구문 오류, 예기치 않은 'use'(T_USE) 나를 위해 구문 오류를 발생시키지 않습니다. – Progrock

+0

죄송합니다 .... 내 나쁜 ... 바보 같은 오류, 나는'custom_compare ($ a, $ b) 함수가 아니라'$ custom_compare = function ($ a, $ b) 열쇠)' – ex4