2010-06-22 2 views
1

나는 다음과 같은 코드를 수동 배열을 선택합니다 :PHP 배열 선택

<?php 

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' "); 


while($article= mysql_fetch_array($articleQuery)){ 
    $aid = $article['id']; 
    $media = $article['media']; 
    $link = $article['link']; 
} 


echo $aid[0]; 

?> 

문제는 정말 올바른 정보를 표시/선택하지 않는 것이 있습니다. 내가 원한 것은 첫 번째 배열의 값을 선택할 수 있다는 것입니다.

미리 감사드립니다. 당신은 단지 첫 번째 행을해야 할 경우

+0

배열 총 1 개만 원하십니까? 아니면 첫 번째 배열을 액세스 할 수있는 메서드 및 나머지 데이터에서도 사용하고 싶습니까? – trueheart78

+1

루프의 반복마다 $ aid가 덮어 쓰기됩니다. 마지막 줄에는 배열 컨텍스트에서 문자열 인 기사 ID를 사용하고 있습니다. 이렇게하면 마지막 기사 ID 번호의 첫 번째 문자가 표시됩니다. 마지막 기사의 ID가 12345이면 에코가 '1'을 출력합니다. – racerror

답변

1
$firstrow = null; 
while($article= mysql_fetch_array($articleQuery)) { 
    if ($firstrow === null) 
     $firstrow = $article; 

    $aid = $article['id']; 
    $media = $article['media']; 
    $link = $article['link']; 
    //manipulate $aid, $media and $link. 
} 

//manipulate $firstrow 

대신의 루프에서, 하나 개의 결과로 쿼리를 제한하고 최대 한 번 mysql_fetch_array을 실행합니다.

+0

첫 번째 배열을 선택하는 것으로 제한하고 싶지는 않습니다. 배열의 위치를 ​​선택할 수 있기를 원합니다. 이렇게하면 : $ aid [0]는 작동해야하지만 어떤 이유로 그 배열에있는 정보의 단일 문자 만 표시합니다. 배열 카운터를 사용하고 싶기 때문에 어레이 카운터를 재설정하고 싶지 않습니다. – Farax

+0

@Farax 그건 새로운 요구 사항입니다. 그럼 @ Sarfraz의 대답과 함께 가라. 할 수 있으면 피해야 할 기억에서 전체 결과를 유지하게 될 것입니다. 또한 mysqli 확장을 사용해야한다. – Artefacto

1

아니면 다음과 같이 수행 할 수 있습니다

$array = array(); 
while($article = mysql_fetch_object($articleQuery)){ 
    $array[] = $article; 
} 

echo $array[0]->id; // get first id 
echo $array[0]->media; // get first media 
echo $array[0]->link; // get first link 

echo $array[1]->id; // get second id 
echo $array[1]->media; // get second media 
echo $array[1]->link; // get second link 
// and so on....... 
0

당신이 배열로 $ 도움을 원하는 경우, 당신이 그런 일을 수행해야합니다

$aid = array(); 
while($article= mysql_fetch_array($articleQuery)){ 
    $aid[] = $article['id']; 
} 
+0

이것은 내가 찾고 있었던 것이다. 고마워요! – Farax

0

문제는 자사 아니다 실제로 을 선택/표시하면 올바른 정보가 표시됩니다. 내가 원하는 것은 이 첫 번째 어레이의 값을 선택하는 것입니다. 당신이 원하는 무엇

은 propably 이것이다 : 당신은 불필요한 루프를

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' "); 
$article= mysql_fetch_array($articleQuery); 
echo $article[0]; 

. SQL 쿼리에 "제한 1"을 추가 할 수도 있습니다. 나는 당신의 목표를 정확하게 이해하고 있는지 확신 할 수는 없지만.

0

mysql_fetch_assoc을 사용하면 필드 이름을 배열 인덱서로 사용하므로 $ article [0] 대신 $ article [ 'id']가됩니다. 그렇게하면 새로운 열을 추가하여 테이블 정의를 변경하면 코드가 손상되지 않습니다!

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' LIMIT 1"); 
$article= mysql_fetch_assoc($articleQuery); 
var_dump($article); 
0

당신이 정말로 첫 번째 결과를 원하는 경우 :

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' LIMIT 1"); // note LIMIT clause 
if(false !== ($article = mysql_fetch_array($articleQuery))) 
{ 
    $aid = $article['id']; 
    $media = $article['media']; 
    $link = $article['link']; 
} 
echo $aid; 

을 당신이 그들 모두를 원하지만 색인 경우

$articleQuery = mysql_query("SELECT * FROM articles WHERE topic = 'IT' "); 
while($article= mysql_fetch_array($articleQuery)) 
{ 
    $aid[] = $article['id']; 
    $media[] = $article['media']; 
    $link[] = $article['link']; 
} 
echo $aid[0]; 
0

이유는 단 하나 개의 항목을 선택하여 SQL 문을 편집 할 ?

mysql_query("SELECT * FROM articles WHERE topic = 'IT' LIMIT 1"); 

그러나 코드의 오류는 선택한 모든 레코드를 반복하면서 각 패스에서 변수를 덮어 쓰는 것입니다. 당신이 배열로 모든 행을 저장하려는 경우, 당신은이처럼 구문을 수정해야합니다 : 당신이 aid[0]와 함께 첫 번째 행에 액세스 할 수 있습니다 후

while($article= mysql_fetch_array($articleQuery)){ 
    $aid[] = $article['id']; 
    $media[] = $article['media']; 
    $link[] = $article['link']; 
} 

을 ....

하지만 그 대신 나는 다른 구조 좋을 것 : 그 무엇

while($article= mysql_fetch_array($articleQuery)){ 
    $articles[]['aid'] = $article['id']; 
    $articles[]['media'] = $article['media']; 
    $articles[]['link'] = $article['link']; 
} 

는 각 레코드는 기사와 관련 모든 데이터를 보유하고 하나의 데이터 구조로 모든 데이터를 수집합니다.당신은 이런 식으로 접근합니다 :

echo $articles[0]['aid']; 
echo $articles[0]['media']; 
echo $articles[0]['link']; 

를이 당신에게 히브리어처럼 보이는 경우, PHP manual section for arrays를보십시오.