foreach 루프의 값을 배열에 저장하는 방법은 무엇입니까?


115

foreach 루프의 값을 배열에 저장해야하는데 도움이 필요합니다.

아래 코드는 작동하지 않고 마지막 값만 저장하고 시도 $items .= ...,했지만 트릭을 수행하지 않고 있으며 도움을 주시면 감사하겠습니다.

foreach($group_membership as $i => $username) {
    $items = array($username);
}

print_r($items);

12
.=텍스트를 추가합니다. []배열에 추가합니다.
Skilldrick 2010-06-15

지금까지 Skilldrick은 더 이상 갈 필요가없는 하나의 라이너로 그것을 못 박았습니다.
user1946891

답변:


255

$items루프 외부 에서 배열을 선언하고 배열 $items[]에 항목을 추가하는 데 사용 합니다.

$items = array();
foreach($group_membership as $username) {
 $items[] = $username;
}

print_r($items);

7
또한 사용하지 않을 경우 키 ( $i)를 추출하지 마십시오 .
Matteo Riva

2
$items = array();foreach 전에 선언하는 것도 필요하지 않습니까? PHP는 하늘의 배열이 만들어집니다
BassMHL

$ username 중 일부가 null이면 어떻게됩니까? 레코드가 API에서 나오고 어떻게 든 배열에 널 레코드가있는 비슷한 상황이 있습니다.
pixelwiz

14

사용하다

$items[] = $username;

7
$items = array();루프 앞에 나타나는지 확인하십시오 .
Skilldrick 2010-06-15

$ items = array (); 선언해야하는 이유를 설명해 주시겠습니까? 루프 전에. 나는 이와 같은 일을했고 그것을 선언하지 않았고 여전히 작동합니다. 추가하는 것이 더 낫습니까, 아니면 필요하지 않습니까?
robk27


7

시험

$items = array_values ( $group_membership );

1
foreach 루프가 그 이상을 수행한다고 가정합니다. 그렇지 않으면 이것이 최상의 솔루션입니다.
Matteo Riva

5
<?php 
$items = array();
$count = 0;
foreach($group_membership as $i => $username) { 
 $items[$count++] = $username; 
} 
print_r($items); 
?>

3
$ count 물건은 필요 없습니다. $ array [] = $ thing;

나는이 대답에 대해 반대표를 던지는 것을 보류 할 것이다 : 1. 이것은 코드 전용 대답이다. 2. 개발자에게 불필요하거나 나쁜 관행을 가르친다 ... 왜냐하면 이것은 Disciplined 일을하고 Stackoverflow를 더 나은 자원으로 만들 수있는 좋은 기회이기 때문이다. .
mickmackusa 19

내 배열이 배열로 푸시 된 마지막 요소 만 반환하는 문제가 있습니다. 귀하가 제안한 카운트를 사용하여 내 문제를 해결했습니다.
Jass Preet

2

내 대답을 시도 할 수 있습니다.

당신은 이것을 썼습니다 :

<?php
foreach($group_membership as $i => $username) {
    $items = array($username);
}

print_r($items);
?>

그리고 귀하의 경우에는 이렇게 할 것입니다.

<?php
$items = array();
foreach ($group_membership as $username) { // If you need the pointer (but I don't think) you have to add '$i => ' before $username
    $items[] = $username;
} ?>

질문에서 알 수 있듯이 특정 그룹에있는 사용자 이름 배열이 필요한 것 같습니다.이 경우 간단한 while 루프가있는 좋은 SQL 쿼리를 선호합니다.)

<?php
$query = "SELECT `username` FROM group_membership AS gm LEFT JOIN users AS u ON gm.`idUser` = u.`idUser`";
$result = mysql_query($query);
while ($record = mysql_fetch_array($result)) { \
    $items[] = $username; 
} 
?>

while더 빠르지 만 마지막 예는 관찰의 결과 일뿐입니다. :)


0
$items=array(); 
$j=0; 

foreach($group_membership as $i => $username){ 
    $items[$j++]=$username; 
}

위의 코드를 시도해보십시오.


이 코드 전용 답변은 개발자가 사용해서는 안됩니다. 카운터와 증가는 전혀 필요하지 않습니다.
mickmackusa 19

0

너무 많은 오타를 저장하기 위해 :

foreach($group_membership as $username){
        $username->items = array(additional array to add);
    }
    print_r($group_membership);

-1

이 질문은 꽤 오래된 것 같지만 통과 할 경우 PHP 내장 함수 array_push ()를 사용하여 아래 예제를 사용하여 데이터를 배열로 푸시 할 수 있습니다.

<?php
    $item = array();
    foreach($group_membership as $i => $username) {
        array_push($item, $username);
    }
    print_r($items);
?>

반복 된 함수 호출을 만드는 것은 비효율적입니다. 대괄호 푸시 구문 (8 년 전에 제 안됨)이 더 효율적입니다. 이 답변은 단일 요소를 배열로 푸시하는 데 사용해서는 안됩니다. (과의 선언은 $i쓸모가)
mickmackusa는
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.