sort, resort 는 배열안에 있는 값을 정렬하는 함수다.
sort : 오름차순 정렬,
rsort : 내림차순 정렬
ksort, krsort key로 배열을 정렬한다.
ksort : 오름차순 정렬
krsort : 내림차순 정렬
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
krsort($age); // key로 배열을 정렬 ,내림차순 정렬
foreach($age as $key=>$value){
echo "Key=" . $key . ", Value=" . $value;
echo "<br>";
}
arsort : 배열을 값으로 내림차순 정렬하고 인덱스의 상관관계를 유지
asort : 배열을 값으로 오름차순 정렬하고 인덱스의 상관관계를 유지
<?php
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
print_r($fruits);
echo '<br />';
arsort($fruits); // 배열을 값으로 내림차순 정렬하고 인덱스의 상관관계 유지
print_r($fruits);
?>
======================================================
$a=array("a"=>1, "ce"=>2, "ec"=>3, "br"=>4, "df"=>5, "f"=>-5);
1. 연관배열의 value값들을 합하라.
array_sum 은 배열 안의 모든 값을 더하여 그 결과를 리턴하는 함수다.
echo array_sum($a);
array_sum 이 foreach 문으로 결과보다 훨씬 빠르다고 되어 있다. 이유는 fast C로 구현되어 있다고 한다.
2. 연관배열의 인덱스값에 의한 내림차순 정렬을 하고 그 값을 list와 each를 사용하여 출력하라. (krsort 이용할 것)
krsort($a); // key로 배열을 내림차순 정렬
for($i=0, $c=count($a); $i<$c; $i++) {
list($key, $value) = each($a);
echo $key, ' = ', $value, '<br />';
}
3. 다음 배열을 오름차순으로 정렬하고 50 보다 큰 값을 지닌 요소들의 개수를 출력하라.
$a=array(34, 7, 5, -54, 64, 59, 100, 59, 27);
array_filter()함수는 배열의 각 요소 중에서 지정한 함수의 조건에 일치하는 요소만 새로운 배열에 다시 되돌려주는 함수다.
$arr = array_filter($R, '콜백함수명'); // $R : array
아래 코드를 실행해보면 필터링한 결과를 알 수 있다.
test_filter는 콜백함수명이다.
<?php
function test_filter($var){ // 배열 요소의 값을 인수로 받는다.
if(! is_int($val)) { // 전달된 값이 정수가 아니면 false를 반환한다.
return false;
}
return($var > 50); // 조건에 맞으면 true, 조건에 맞지 않으면 false를 반환한다.
}
print_r(array_filter($a,'test_filter')); // pinrt_r 함수는 배열을 출력한다.
echo '<br />';
echo count(array_filter($a,'test_filter'));
?>
문제의 답
sort($a); // 오름차순 정렬, rsort() 내림차순 정렬
echo count(array_filter($a, function($val){
return $val > 50;
}));
4. 다음 배열에서 2의 배수들을 삭제하고 배열 전체를 출력하라.
$a=array(2,4,7,9,13,34,56);
(2,4,34,56을 삭제하고 배열a를 출력)
<?php
$a=array(2,4,7,9,13,34,56);
print_r(array_filter($a,function($n){
return $n%2 !=0;
}));
?>
5. 다음 배열에서 소수점 10자리수가 5인(xx.5xx) 값들을 출력하라.
$a=array(34.12, 7.0, 5.9, -54.512, 64.52, 59.5, 100.1, 59.23, 27.54);
문자열에 특정 문자열이 포함되어 있는지 확인하려고 할때 strpos()함수를 사용한다.
strpos(string,find,start)
<?php
$find_letters = array('a', 'c', 'd');
$string = 'abcdefg';
if(strpos($string, $find_letters) !== false)
{
echo 'All the letters are found in the string!';
}
?>
문제의 답
<?php
$a=array(34.12, 7.0, 5.9, -54.512, 64.52, 59.5, 100.1, 59.23, 27.54);
print_r(array_filter($a,function($n){
return strpos($n, '.5') !== false;
}));
?>
또는
<?php
$a=array(34.12, 7.0, 5.9, -54.512, 64.52, 59.5, 100.1, 59.23, 27.54);
print_r(array_filter($a,function($n){
return preg_match('/\.5/',$n);
}));
?>
'Web 프로그램 > PHP 응용 및 활용' 카테고리의 다른 글
PHP Form 다중 체크박스 값 전달 및 POST (0) | 2018.04.02 |
---|---|
PHP 배열 합집합, 교집합, 차집합, 대칭차집합 (0) | 2018.04.01 |
PHP 로또번호 생성 (0) | 2018.03.28 |
온라인 투표 소스 (회원관리 포함) (2) | 2017.12.23 |
Deprecated: preg_replace() (0) | 2017.12.07 |