PHP

php : foreach , each, list 함수 .... 생각

에혀 2020. 1. 26.

맘만 급한 개초보로서,

each, list 는 거의 안쓰고, 편리하게 foreach 로 쓴다

each 와 list 를 쓰는 것보다 foreach 가 훨씬 빠르다.

 

위와 같은 말들에 each 와 list 함수는 패스하고, foreach를 쓰면서 여전히 찝찝했다.

 

foreach 도 for와 each 가 왜 결합이 돼 있나. each 가 뭐길래...? 이런 근본적인 의문이.

 

그래, 한번 보자. ㅠㅠ 하기 싫은 걸 할 때는 뇌가 느리게 움직이고, 이해도 안된다. ㅠ

가즈아!!!

 

아래와 같은 예시가 가장 많은데

$arr = array('도','레','미');

 

while (list($a,$b)=each($arr){

echo $a; // each 에서 리턴한, 배열원소의 키

echo $b; // each 에서 리턴한, 배열원소의 값

}

 

  1. each 함수는 한번 실행할 때마다, 배열의 key 와 value 를 리턴한다고 한다.
    ( ----> mysqli_fetch_array() 나 mysqli_fetch_assoc() 와 비슷한 형태구나! 하고 이해함. )
  2. list (배열키, 배열값) 을 받는다. each 와 같이, 한번 실행할 때마다 키와 값을 담는다.
  3. each 함수는 어떤 형태로 배열의 키와 값을 반환할까? 흠...


$arr 을 each 함수에 집어넣고, $a 변수에 집어넣어보자. 어떤 값을 반환하는지 보기위해...

 

$arr = array('도','레','미');

$a =each($arr);

 

역시 진리의 print_r() 

 

Array (

[1] => 도 

[value] => 도

[0] => 0 

[key] => 0

)

arr[0] 을 이렇게 친절하게도..... 풀어내다니.... 감동. ㅠㅠ $a[0] 이나, $a['key'] 를 하면, 언제든 배열 키도 뽑을 수 있다는 것이잔아... ( 지금 생 기초단계에서 필요없겠으나, 복잡한 배열 이용할 시 힌트가 많이 될 것 같다 )

 

each 함수는 인덱스배열과 연관배열 둘 다 반환하고 있었다. mysqli_fetch_array() 처럼... +_+

foreach 와 비교 실행을 해보니, 느리다기 보다는.... 이래서, 느릴것인데, 이 만큼 느리더라고 했으면 이해가 빡 갔을낀데. 역시 개초보는 힘들어. ㅠ

 

위와 같이 인덱스/연관 두 형태로 리턴하기 때문에, 이렇게 되는 것임.

 

<?php

$arr = array('도','레','미');

$a = each($arr); //

echo $a[0]; // 0

echo $a[1]; // 도

echo $a['key']; // 0

echo $a['value']; // 도

?>

 

그런데,  변수 $a에 담갔다 꺼내는 것이 아니라, 

list(키 변수,값 변수) 를 이용하면...

list($a,$b) = each($arr);

echo $a;

echo $b;

바로 이렇게 키(인덱스)와  값을 리턴한다.

<결과>

0

 

요걸.. 최종 예제로 foreach 와 비교하면

 

 

1) for 문을 이용

 

for ($i=0;$i<count($arr);$i++){

   $a=each($arr);

   echo $a[0];

   echo $a[1];

    }

 

2. while 문을 이용

 

while (list($a,$b)=each($arr) {  // $arr 배열변수에서 키와 값을 다시 배열로 리턴!---> list 함수에 담아라. 반복

echo $a $b ;

}

 

3. foreach 문을 이용.

 

foreach ($arr as $a => $b){

echo $a $b;

}

 

foreach 1) each(배열변수)로 키와 값을 다시 배열로 리턴 후
          2) list함수로 받아서 원소의 키와 값만 각각 변수에 저장하는 것을 합쳤다.
          3) 반복문이여서 for 라는 이름을 사용하나 보다.

  

댓글