2013-02-18 2 views
0

키가 날짜 인 mutlidimensional 배열을 반환하는 함수를 작성하려고하는데 날짜에 비용과 값이 두 개 더 있습니다. 주식 시장이 그날 (IE 주말 또는 휴일) 닫히면 결과는 제로 행이 될 것입니다. 나는 그날의 비용과 가치를 이전과 동일하게 책정하고 싶다. 분명히 나는 ​​여기에서 무엇인가 놓치고있다. 그러나 나는 이해하지 않는다. 당신이 $current 다르게 $last를 포맷처럼결과가 0이면 이전을 사용하십시오. 내가 뭘 잘못 했니?

function getNetWorth() 
{ 
    // Query for First and Last date 
    $query = $this->db->query("SELECT min(date) as start from Transactions ORDER BY date ASC;"); 
    $date = $query->row_array(); 
    $current = $date['start']; 
    $networth = array(); 
    while(strtotime($current)<= strtotime(date('Y-m-d'))) 
    { 
     $cost = 0; 
     $value = 0; 
     $run = date('Y-m-d', $current); 
     // Query for net worth for given day 
     echo $current; 
     $sql = "SELECT Transactions.symbol, sum(shares) AS shares, sum(shares * price) AS cost, History.close as `close`, (sum(shares) * History.close) as value ". 
       "FROM Transactions INNER JOIN History ON (History.symbol = Transactions.symbol AND History.date ='".$run."') ". 
       "WHERE (action <>5) AND Transactions.date <= '".$run."' GROUP BY Transactions.symbol HAVING sum(shares) > 0"; 
     $query = $this->db->query($sql); 
     if($query->num_rows() < 1) 
     { 

      $date = strtotime("-1 day", $current); 
      $last = date('Y-m-d', $date); 
     // $networth[$current][] = $networth[$last]; 
     } 
     else 
     { 
      $result = $query->result_array(); 
      $cost += $result['cost']; 
      $value += $result['value']; 
      $networth[$current]= array("cost" => $cost, "value" => $value); 

     } 


     $current = strtotime("+1 day", strtotime($current));  
    } 
    return $networth; 
} 
+0

: 당신이 라인을 변경할 수 있습니다 있도록 $last$run는 같은 포맷됩니다. 배열에 대해서는 중괄호로 구분하십시오.''$ arr [ 'script']} ""안에있는 $ var – Amelia

+0

실제 문제가 무엇인지 잘 모르겠습니다. 그래서 추측하기 어렵습니다. 볼 곳. 주석 처리 된 라인이 문제를 일으키는 라인입니까? 오류 메시지가 나타나거나 결과가 잘못 되었습니까? 그렇다면 어떤 방식으로? – Jerry

답변

0

는 너무 $networth[$last] 아무것도 일치하지 않을 보인다. 당신이 따옴표 문자열, 연결할 필요가없는 경우

$networth[$run]= array("cost" => $cost, "value" => $value); 
+0

글쎄, 나는 그 행운을 시도했다. 그러나 여기에 내가 얻고있는 것이있다. 첫 번째 하나는 잘 작동하지만 루프에서 두 번째 시간에 도달하면 출력은 '1969-12-31'이지만'2010-06-02 '이어야합니다. 내 strtotime 함수를 사용하여 루프를 사용할 수 있습니까? 지금 당장처럼 매일 매일? – brandenwagner

+0

1969-12-31은 유닉스 시간이 0 인 문자열 표현으로, 'strtotime'이 어딘가에 실패했음을 나타냅니다. 당신은 날짜를 표현하는 많은 변수를 가지고 있는데, 나는 당신이 '첫 번째'와 '두 번째로 루프를 통과했다'(하나의 루프 만 있음)를 말하는지 확실하지 않습니다. 그것이 나 였다면 배열 인덱스에 타임 스탬프를 사용했습니다. 또한 위 코드의 주석과 함께, 값은 networth 배열에 설정되지 않습니다. – Jerry

관련 문제