2016-10-15 1 views
-1

알파벳 순서로 배열을 인쇄하려고하고 각 문자열의 첫 글자를 대문자로 표시하려고합니다. foreach()에 잘못된 인수가 있다고합니다.PHP 정렬 문자열 배열

<?php 
$stringsArr = array("zulu", "alpha", "omega"); 
function sortAndTitle($arr){ 
    $newArr = ucfirst(sort($arr)); 
    foreach($newArr as $value){ 
     echo $value . "<br/>"; 
    }; 
}; 
sortAndTitle($stringsArr); 
?> 
+0

나는 왜 코드가 함수 선언과 배열을 참조로 전달하지 않는 함수 호출로 이렇게합니까? 왜 직접하지 않니? '$ mapped = array_map ("ucfirst", sort ($ stringsArr)))'done. –

+0

@ Mike'Pomax'Kamermans는'sort()'가 반환하는 것을 검토합니다. 배열을 제자리에서 수정하고'bool'을 반환하므로 코드가 작동하지 않습니다. – pid

+0

그래서 제인 매튜 (Jibin Matthew)의 대답처럼 array_map을 정렬하십시오. –

답변

1

적어도 두 가지 오류가 있습니다.

sort() 함수는 array을 반환하지 않지만 간단히 bool을 반환합니다.

ucfirst() 함수는 array을 허용하지 않고 string 만 허용합니다.

대신을 시도해보십시오

<?php 

function sortAndTitle($arr) { 
    sort($arr); 
    return array_map('ucfirst', $arr); 
} 

print_r(sortAndTitle([ "alhpa", "beta", "gamma" ]); 

그것은 당신이 $arr 배열임을 알고있는 경우 sort()의 결과를 테스트하기 위해 아무 소용이 없습니다. 배열이 아닌 경우에만 실패하므로 너무 많이 신경 쓰지 마세요. 최종 ?>은 생략 할 수 있습니다 (생략해야 함). 이것은 Symfony와 같은 특정 프레임 워크를위한 코드를 작성하는보다 안전한 방법입니다.

또한 sortAndTtitle() 기능 내부에는 인쇄하지 마십시오. 이름에서 알 수 있듯이 (대문자)로 정렬됩니다.

마지막 줄은 시험용입니다.

2
if(sort($stringsArr)){ 
    print_r(array_map('ucfirst', $stringsArr)); 
}else{ 
    echo "sort failed"; 
} 

그래서 당신이 경우에 그것은 ucfirst() 배열을 허용하지 않는, 문자열을 허용하지 않습니다

<?php  
function sortAndTitle($arr){ 
    if(sort($arr)){ 
     print_r(array_map('ucfirst', $arr)); 
    }else{ 
     echo "sort failed"; 
    } 
} 
$stringsArr = array("zulu", "alpha", "omega"); 
sortAndTitle($stringsArr); 
?> 
3

sort()과 같을 것이다. 내부에 정렬되어 있으므로 변수에 sort ($ arr)를 저장할 필요가 없습니다. 플래그 유형을 정렬에 추가하는 것이 자연 스럽습니다. 이 시도 :

<?php 
$stringsArr = array("zulu", "alpha", "omega"); 

function sortAndTitle($arr){ 
    sort($arr, SORT_NATURAL); 
    foreach($arr as $value){ 
     echo ucfirst($value). "<br/>"; 
    } 
} 
sortAndTitle($stringsArr); 
?> 

참고 : PHP 함수의 모든 매개 변수는 값으로 전달됩니다. 배열 (또는 함수에 전달 된 매개 변수)을 수정하려면 배열 매개 변수 앞에 앰퍼샌드 (&)가 붙은 함수를 선언해야합니다. 따라서 귀하의 경우 sortAndTitle (& $ stringsArr).

+0

감사합니다. 내 코드가 가장 빨리 수정 된 것 같습니다. 이제 sort()의 매개 변수를 살펴 보겠습니다. –

+0

@ Nathan Wonz이 대답이 도움이 될 경우, 수락하려면 틱 아이콘을 클릭하십시오. –

0

문제에 대한 귀하의 통찰력에 감사드립니다. 나는 모든 반응으로부터 무언가를 배웠다. 내가 명확하지 않은 한 가지는 배열 값을 UpperCase First Letter로 영구히 변경해야한다는 것입니다. 다음은 그 일을 처리하는 코드입니다. 더 빠른 방법이 있으면 의견을 말하십시오.

$stringsArr = array("zulu", "alpha", "omega"); 
function sortAndTitle($arr){ 
    sort($arr); 
    for($x = 0; $x < count($arr); $x++){ 
     $arr[$x] = ucfirst($arr[$x]); 
    }; 
    return implode(", ", $arr); 
}; 
echo sortAndTitle($stringsArr);