2012-02-01 4 views
1

표시 할 이미지가있는 데이터베이스 테이블이 있습니다. 저의 견해로는 각 결과에 대해 최대 10 개의 이미지를 표시하고 싶습니다. 각 결과에 대해 최대 값으로 사용할 수있는 20 개의 이미지가있는 배열을 설정했습니다. 일부 결과에는 몇 개의 이미지 만 있거나 전혀 표시되지 않습니다. 그래서 배열 값이 비어 있는지 확인하기위한 테스트가 필요한 루프가 필요합니다. 그렇다면 10 개의 결과를 얻을 때까지 다음 값으로 이동하거나 배열의 끝에 도달해야합니다.PHP는 어떻게 조건이 충족 될 때까지 배열을 통해 루프?

내가해야 할 일은 테스트 결과에서 두 번째 배열을 빌드 한 다음 해당 배열을 사용하여 이미지를 표시하는 일반 루프를 실행하는 것입니다. 비슷한 것

<?php 
    $p=array($img1, $img2.....$img20); 

    for($i=0; $i<= count($p); $i++) { 
    if(!empty($i[$p])) { 
    ...code 
    } 
    } 
?> 

비어 있지 않은 배열 값을 새로운 배열에 저장하는 방법은 무엇입니까?

+2

을 당신이'의미 $ P는 [$ i]는'하고 생각하지 않는다'$ 8 [$의 P]'. –

+0

10 개의 이미지를 출력 하시겠습니까? 아니면 각 어레이에 10 개의 이미지가있는 어레이를 여러 개의 어레이로 나누고 싶습니까? 아니면 정확히 무엇을하고 싶습니까? – Tom

+0

단지 10 개, 다중 배열 없음. 아래 솔루션에서 작업하기. – huzzah

답변

2

당신은 같은 것을 할 수있는 :

$imgs = array(); $imgs_count = 0; 
foreach ($p as $img) { 
    if (!empty($img)) { 
     $imgs[] = $img; 
     $imgs_count++; 
    } 
    if ($imgs_count === 10) break; 
} 
+0

이것은 실제로 절반을 제외하고는 저에게 효과적입니다.이 끔찍한 기본 테이블이나 뷰를 찾을 수 없습니다. 테이블 cloudmed.images는 존재하지 않습니다. 내 작은 디버그 페이지 (나는 Cakephp를 사용하고있다). 그리고 더 나쁜, 내가 페이지를 다시로드하려고 계속하면 Google 크롬 페이지에서 액세스하지 못하게합니다 : 오류 139 (net :: ERR_TEMPORARILY_THROTTLED) : 서버에 대한 요청이 일시적으로 제한되었습니다. 도대체 내가 틀린거야? !!! – huzzah

+0

제 서버가 제게 부족하다고 생각합니다. 고맙습니다! – huzzah

+0

아니요, 오늘도 여전히 일어나고 있습니다. 누구든지이 기능을 통해 어떤 일이 벌어지고 있는지 알 수 있습니까? – huzzah

1
$new_array[] = $p[$i]; 

$new_array (array_push()a.k.a)의 다음 요소로 $p[$i]를 저장합니다.

2

array_filter()을 호출하여 배열에서 비어 있지 않은 요소 만 가져올 수 있습니다. array_filter()은 제거 할 항목을 결정하기 위해 콜백 함수를 사용할 수 있지만이 경우 empty()FALSE으로 평가되며 콜백이 필요하지 않습니다. empty() == TRUE을 평가하는 값은 단순히 제거됩니다. 당신은 SQL 쿼리의 결과를 제한에 대해 생각 해본 적이

$p=array($img1, $img2.....$img20); 
$nonempty = array_filter($p); 

// $nonempty contains only the non-empty elements. 

// Now dow something with the non-empty array: 
foreach ($nonempty as $value) { 
    something(); 
} 

// Or use the first 10 values of $nonempty 
// I don't like this solution much.... 
$i = 0; 
foreach ($nonempty as $key=>$value) { 
    // do something with $nonempty[$key]; 
    $i++; 
    if ($i >= 10) break; 
} 

// OR, it could be done with array_values() to make sequential array keys: 
// This is a little nicer... 
$nonempty = array_values($nonempty); 
for ($i = 0; $i<10; $i++) { 
    // Bail out if we already read to the end... 
    if (!isset($nonempty[$i]) break; 

    // do something with $nonempty[$i] 
} 
+0

감사합니다. 불행히도, 어떤 이유 때문에, for 루프를 사용하면 배열의 첫 번째 부분에 10 개 미만의 이미지가있을 때 배열의 마지막 값에서 "정의되지 않은 오프셋"을 갖기 때문에 빈 값을 유지합니다 ($ p 배열 두 테이블의 결과가 있음). 당신은 여기에 출력을 볼 수 있습니다 : http://rentcondos4less.cloudmedia.biz/lodgings/debug – huzzah

+0

@HeatherWalters 방금 변경했습니다. 배열에서 요소를 삭제하면 해당 키가 더 이상 순차적 일 필요가 없다는 사실을 잊어 버렸습니다. –

+0

@felipelavinz 위의 내 의견을 참조하십시오,이 모든 이상한 서버 요청 메시지를 반 시간 메시지를 조절할 때 (물론 그의 코드를 구현할 때 .... 내 호스팅 회사는 짜증? 조명이 LA에서 희미해질까요?) – huzzah

1

을 위해 무엇을 찾고 될 수있다?

select * from image where img != '' limit 10 

이렇게하면 항상 10 개의 결과가 비어 있습니다.

관련 문제