2013-11-25 405 views
1

$query->results()陣列的的print_r給我例如:笨 - 操縱CI_DB_mysql_result對象

CI_DB_mysql_result Object 
     (
      [conn_id] => Resource id #28 
      [result_id] => Resource id #45 
      [result_array] => Array 
       (
       ) 

      [result_object] => Array 
       (
        [0] => stdClass Object 
         (
          [id] => 3 
          [is_tool] => 1 
         ) 
        [1] => stdClass Object 
         (
          [id] => 7 
          [is_tool] => 0 
         ) 
        [2] => stdClass Object 
         (
          [id] => 12 
          [is_tool] => 1 
         ) 
        [3] => stdClass Object 
         (
          [id] => 13 
          [is_tool] => 0 
         ) 
       ) 

      [custom_result_object] => Array 
      (
      ) 

     [current_row] => 0 
     [num_rows] => 10 
     [row_data] => 
    ) 

我想通過去除一個或多個stdClass的對象和更新[NUM_ROWS]將操縱上面的結果我留下的行數,但另外離開數組,就好像它是db查詢的結果,因爲我的原始$query變量。

這是可能的,我該怎麼做呢?

非常感謝。

+1

爲什麼?爲什麼不直接轉儲結果然後操作數據。 –

+0

,因爲在此之後我有舊代碼,期望CI_DB_mysql_result類型,我想避免更改舊代碼。 –

+2

然後更改舊代碼。你永遠不能「知道」輸出是什麼,因爲它不打算在沒有很多工作的情況下被操縱,並且當你編寫代碼以某種方式執行時,你可以將舊代碼改寫爲簡單地拿結果。 –

回答

0

可以遍歷結果集,確保你通過引用您的foreach使用符號傳遞:

foreach($records->result() AS &$record) { 
    unset($record->x); // Remove a key 
    $record->foo = 'Bar'; // Add a key 
} 

請注意: - 這不是在PHP 5的所有版本!

您也可以嘗試擴展CI_DB_mysql_result類,並返回該實例,只要它與默認實現保持兼容即可。然後你可以增加num_rows方法來包含你的自定義代碼。