배열
//range를 이용해 알파벳 a~z까지 배열로 만든다.
$letters = range('a','z');
배열처리 루프
foreach($letters as $current)
echo$current.' ';
foreach는 범위값 지정없이 해당배열값을 차례대로 출력한다.
다른값을 인덱스로 할수있다.
$price = array('tires'=>100); //$price['tires'] = 100; 과 동일하다.
$price['oil'] = 10;
$price['spark Plugs'] = 4;
키값과 해당 키값의 value를 구분해 사용할수 있다.
while ($element = each( $prices ) )
{
echo $element['key']; //키값출력
echo ' - ';
echo $element['value']; //해당 키의 value 출력
echo ' <br> ';
}
list() 함수를 이용해 키값과 해당 키의 value값을 분리해서 사용할수 있다.
while (list($product, $price ) = each( $prices ) ) //$pirces의 키값은 $product에 저장되고 value는 $price에 저장된다.
echo "$product - $price<br>";
each()함수는 한번 사용하면 가리키는 배열의 위치가 바뀌기때문에
다시사용하고 싶다면 reset()함수를 이용해 배열의 처음으로 다시 출력할수 있다.
reset($prices);
while (list($product, $price ) = each( $prices ) )
echo "$product - $price<br>";
다차원배열 사용하기
2차원배열
$products = array( array( 'TIR', 'Tires', 100),
array( 'OIL', 'Oil', 10),
array( 'SPK', 'Spark Plugs', 4));
2차원배열 출력
for( $row = 0; $row < 3; $row++ )
{
for( $column = 0; $column < 3; $column++ )
{
echo '|'.$products[$row][$column];
}
echo '|<br>';
}
2차원배열출력(분리해서 출력)
for($row = 0; $row < 3; $row++ )
{
while (list( $key, $value ) = each( $products[ $row ] ))
{
echo "|$value";
}
echo '|<br>';
}
3차원 배열 만들기
$categories = array( array( array( 'CAR_TIR', 'Tires', 100),
array( 'CAR_OIL', 'Oil', 10),
array( 'CAR_SPK', 'Spark Plugs', 4)
),
array( array( 'VAN_TIR', 'Tires', 120),
array( 'VAN_OIL', 'Oil', 12),
array( 'VAN_SPK', 'Spark Plugs', 5)
),
array( array( 'TRK_TIR', 'Tires', 120),
array( 'TRK_OIL', 'Oil', 12),
array( 'TRK_SPK', 'Spark Plugs', 5)
)
);
3차원 배열 출력
for ($layer = 0; $layer < 3; $layer++ )
{
echo "Layer $layer<br>";
for ( $row=0; $row < 3; $row++ )
{
for( $column = 0; $column < 3; $column++ )
{
echo '|'.$categories[$layer][$row][$column];
}
echo '|<br>';
}
}
//배열정렬하기
/*
$products = array( 'Tires', 'Oil', 'Spark Plugs' );
sort($products);
foreach($products as $current)
echo $current. ' ';
$prices = array( 100,10,4);
sort($prices);
foreach($prices as $current)
echo $current. ' ';
sort는 오름차순
반대->rsort(내림차순)
문자열 인덱스 배열은 키와 값이 구분되어있기때문에 따로 정렬이 가능
asort 요소의 값을 오름차순으로 정렬
반대->arsort(내림차순)
ksort 문자열 키를 오름차순으로 정렬
반대->krsort(내림차순)
$prices = array('Tires'=>100,'Oil'=>10,'Spark Plugs'=>4 );
asort($prices);
echo "asort<br><br>";
foreach($prices as $current)
echo $current. ' ';
echo "<br><br>";
$prices = array('Tires'=>100, 'Oil'=>10, 'Spark Plugs'=>4 );
ksort($prices);
echo "ksort<br><br>";
foreach($prices as $current)
echo $current. ' ';
*/
/*
다차원배열 정렬
*/
$products = array( array( 'TIR','Tires',100 ),
array( 'OIL','Oil', 10),
array( 'SPK','Spark Plugs', 4));
/*
$x, $y두 배열값
오름차순(내림차순은 비교값 기호를 반대로 바꾸면된다.)
$x[]안에 들어가는 값은 비교할 배열순서값
*/
function compare($x, $y)
{
if( $x[2] == $y[2] )//두값이 같을때 제자리
return 0;
else if($x[2] > $y[2] )//$x가 클때 앞으로 이동
return -1;
else
return 1; //작을때 뒤로이동
}
usort($products,'compare');
/*
for( $row = 0; $row < 3; $row++ )
{
for( $column = 0; $column < 3; $column++ )
{
echo '|'.$products[$row][$column];
}
echo '|<br>';
}
*/
/*
uksort() 사용자정의함수로 정렬(키로 정렬)
uasort() 사용자정의함수로 정렬(값으로 정렬)
*/
//array_reverse() 배열을 복사해서 원래 배열과 순서를 바꿀수있다.
//shuffle()배열값을 랜덤으로 재배치한다. array_rand()와 동일
$pictures = array('123.gif','2.jpg',
'456.jpg');
shuffle($pictures);
?>
<html>
<body>
<table>
<tr>
<?
/*
for ($i=0;$i<3;$i++)
{
echo '<td><img src="';
echo $pictures[$i];
echo '"></td>';
}
*/
?>
</tr>
</table>
<?
/*
$numbers = array();
for($i=10; $i>0; $i--)
array_push( $numbers, $i );//배열 카운트를 반대로 변경(10,9,8~~) 반대 - array_pop()
*/
//파일에서 배열로 옮기기
$document_root = $_SERVER['DOCUMENT_ROOT'];
$orders=file("$document_root/123.txt");
$number_of_orders = count($orders);
if($number_of_orders==0)
{
echo '<p><string>no orders pending. please try again later.</strong></p>';
}
echo "<table border='1'>\n";
echo '<tr><th bgcolor="$CCCCFF"> order date</th>
<th bgcolor="$CCCCFF">Tires</th>
<th bgcolor="$CCCCFF">oil</th>
<th bgcolor="$CCCCFF">Spark Plugs</th>
<th bgcolor="$CCCCFF">Total</th>
<th bgcolor="$CCCCFF">Address</th>
</tr>';
for($i=0;$i<$number_of_orders;$i++)
{
//주문한 구분 문자로 나눈다.
$line = explode("/t", $orders[$i] );
//주문한 물품 수만 저장한다.
//intval();숫자형으로 변환
$line[1] = intval( $line[1] );
$line[2] = intval( $line[2] );
$line[3] = intval( $line[3] );
//주문을 출력한다.
echo "<tr><td>$line[0]</td>
<td align='right'>$line[1]</td>
<td align='right'>$line[2]</td>
<td align='right'>$line[3]</td>
<td align='right'>$line[4]</td>
<td >$line[5]</td>
</tr>";
}
echo '</table>';
//20070220
$array = array(1,1,3);
/*
배열값이나 일반값을 루프돌며 하나씩 출력한다.
function my_print($value)
{
echo "$value<br>";
}
array_walk($array,'my_print');
/*
array_walk(값1,함수명,값2);
배열이나 일반 값을 넣을경우 루프를 돌면서 순서대로 처리한다.
값2를 넣을경우 루프돌면서 데이터 값을 수정할수 있다.
더욱이 함수 파라미터값(값1)에 &로 참조를 걸어놀경우
원본 변수 데이터까지 수정이 가능하다.
예를들어 $array = array(1,1,3); 을 선언하고
function my_multiply(&$value, $key, $factor)
{
$value += $factor;
}
array_walk($array,'my_multiply',3);
결과는 원본배열값($array)마다 +3을 더한다.
*/
//원본 변수가 1씩 증가하는 함수(참조를 사용)
/*
function increment(&$value,$amount = 1)
{
$value = $value+$amount;
}
echo $a."<br>";
increment($a);
echo $a."<br>";
*/
//배열수 세기
$array = array(4,5,1,2,3,4,5,6);
//연관 카운트를 센 배열을 만든다. (sql의 group by와 비슷)
$ac = array_count_values($array);
echo count($array);//배열 총갯수
echo sizeof($array);//배열사이즈
//배열키가 이름인 배열을 스칼라함수로 변환
$array = array('key1'=>'value1','key2'=>'value2');
extract($array);
echo "$key1 $key2";
//변환시 extract_type을 지정할수있다. EXTR_OVERWRITE(존재하는변수에 덮어씌움) EXTR_PREFIX_ALL(변수앞에 수식을 붙인다.)
extract($array, EXTR_PREFIX_ALL, 'mk');
echo "$mk_key1 $mk_key2";