2013-08-16 5 views
0

이 함수를 만드는 데 문제가 있습니다. 내 코드가 엉망이고 붙어있어, 게시하지 않을 것입니다. 새로운 솔루션을 요구하고 싶습니다.배열과 루프 일수

나는 오늘 날짜를 조건으로 가져온 배열 (mysql 행)이 있습니다. 이전 배열의 데이터를 기반으로 새 배열을 만들고 오늘 날짜까지 데이터베이스에 삽입하려고합니다. 한계는 15입니다. 따라서이 날짜까지 이미 10 개의 행이있는 경우 첫 번째 배열의 행이있는 한 5 개만 삽입하고 다음 날짜에 계속하십시오.

나는 PHP와 코드 점화 장치를 사용하고있다.

+1

어떤 측면에서 붙어 있습니까? 데이터를 쿼리하는 방법? 결과 계산 방법 특정 수의 새로운 항목을 만드는 방법은 무엇입니까? 새 항목을 다시 데이터베이스에 삽입하는 방법? – verv

+0

나는 루프와 조건을 만드는 데 어려움을 겪고있다. 데이터 쿼리 및 데이터베이스에 다시 삽입하는 것은 괜찮습니다. – infinite

답변

0

데이터를 가져 오는 방법이나 새로운 데이터를 생성하는 방법을 알지 못합니다.

//loop through days that you want to check/update 
    //fetch existing data for this day into $data 
    if(count($data) >= 15) continue; //skip days that already have 15+ 
    for($x = 0; $x < 15 - count($data); $x++) 
    { 
     //insert one new row here 
    } 
//end days loop 
+0

감사합니다. 여기에 코드 섹션을 게시하는 방법을 알려주시겠습니까? (새로운 것임) 이해하기 쉽도록 코드를 게시 할 것입니다. – infinite

+0

각 행을 들여 쓰면 자동으로 코드가됩니다. 4 공백 들여 쓰기 :) 두 개의 백 틱 (물결표 키에있는 것)으로 둘러싸면 작은 비트 중간 문장을'this'와 같은 코드로 표시 할 수 있습니다. – verv

+0

이것은 데이터를 가져 오는 방법입니다 :'$ subscriptions = Subscription :: all (array ('conditions'=> 'token = = ""));'시작 시간은'$ startTime = strtotime ('today '); ', Y-m-d 형식입니다. 이제 내가 성취하고자하는 것은 모든 구독을 처리하고 처리하고 다른 테이블에 삽입하는 것입니다. 나는 그것을 검사 할 것이다 :'$ projects = Project :: all (array ('conditions'=> 'end = "'.date ("Ymd ", $ startTime). 그날 또는 15 세 미만의 프로젝트는 15 개까지 신규로 삽입 할 것입니다 (구독에서). 그런 다음 다음 날'$ startTime = strtotime ('+ 1 day', $ startTime);로 이동하십시오. – infinite

0

여기 내가 어떻게했는지, 내가 원하는대로하고 있습니다. 이 기능을 구현하는 것이 가장 좋은 방법인지 확실하지 않습니다. 여기에서는 테스트 용으로 임시 배열을 사용했습니다. 각 요소는 데이터베이스의 새 행이됩니다. 테스트 용으로 최대 3 개 (15 개 대신)를 사용했습니다.

$subscriptions = Subscription::all(array('conditions' => 'token != "" ', 'order' => 'id asc')); 
    $startTime = strtotime('2013-08-15'); 

    $temparray = array(); 

    $projects = Project::all(array('conditions' => 'end = "'.date("Y-m-d", $startTime).'" ')); 
    if ($projects){$counter = count($projects);}else{$counter = 0;} 

    while (list($key, $value) = each($subscriptions)) 
    { 
     if ($counter == 3) 
     { 
      do 
      { 
       $startTime = strtotime('+1 day', $startTime); 
       $projects = Project::all(array('conditions' => 'end = "'.date("Y-m-d", $startTime).'" ')); 
       if (count($projects) < 3) 
        { 
         $counter = count($projects); 
         break; 
        } 
      } while ($counter <= 3); 

       $temparray[] = $value->date . " " . date("Y-m-d", $startTime); 
       continue; 
     } 

    $temparray[] = $value->date . " " . date("Y-m-d", $startTime); 
    $counter++; 
    }