2010-10-12 73 views
1

我想知道如何去搜索下面的數組中的關鍵problem_id和一個值等於我將提供的變量。然後,當它找到一個具有匹配鍵和變量的數組時,它也會在該數組的該部分中輸出其他值。搜索多維數組的值,然後在數組中輸出其他值

例如,使用下面的示例數據。你如何建議我搜索數組中所有具有關鍵problem_id和值3的數組,然後讓它輸出關鍵problem_update_date的值和關鍵problem_update_text的值。然後繼續搜索找到下一個出現?

在此先感謝,我一直在努力尋找答案,並相信我已超過我的頭!輸出的

print_r($updates);

CI_DB_mysql_result Object 
(
    [conn_id] => Resource id #30 
    [result_id] => Resource id #35 
    [result_array] => Array() 
    [result_object] => Array() 
    [current_row] => 0 
    [num_rows] => 5 
    [row_data] => 
) 

輸出的print_r($updates->result_array());

Array 
(
    [0] => Array 
    (
    [problem_update_id] => 1 
    [problem_id] => 3 
    [problem_update_date] => 2010-10-01 
    [problem_update_text] => Some details about a paricular issue 
    [problem_update_active] => 1 
) 

    [1] => Array 
    (
    [problem_update_id] => 4 
    [problem_id] => 3 
    [problem_update_date] => 2010-10-01 
    [problem_update_text] => Another update about the problem with an ID of 3 
    [problem_update_active] => 1 
) 

    [2] => Array 
    (
    [problem_update_id] => 5 
    [problem_id] => 4 
    [problem_update_date] => 2010-10-12 
    [problem_update_text] => An update about the problem with an ID of four 
    [problem_update_active] => 1 
) 

    [3] => Array 
    (
    [problem_update_id] => 6 
    [problem_id] => 4 
    [problem_update_date] => 2010-10-12 
    [problem_update_text] => An update about the problem with an ID of 6 
    [problem_update_active] => 1 
) 

    [4] => Array 
    (
    [problem_update_id] => 7 
    [problem_id] => 3 
    [problem_update_date] => 2010-10-12 
    [problem_update_text] => Some new update about the problem with the ID of 3 
    [problem_update_active] => 1 
) 
) 

回答

1

對不起@maggie。這幾乎與你所寫的一樣,但在功能上。希望這會幫助你。當然,如果我正確地說明了你的話。

function youAskedForIt($some_array = array(), $value_to_search_for) { 

    foreach($some_array as $value) { 

     if(! isset($value['problem_id']) || ! isset($value['problem_update_date']) || ! isset($value['problem_update_text'])) { 

      continue; 

     } 

     if($value_to_search_for == $value['problem_id']) { 

      echo $value['problem_update_date'] . ' => ' . $value['problem_update_text'] . "<br>\n"; 

     } 

    } 

} 

youAskedForIt($updates->result_array(), 3); 
+0

非常感謝這一點。對此,我真的非常感激。很快就會測試。我打破了MVC模式作爲解決我的問題的臨時解決方案,但是,這是我寧願攻擊它的方式。 – j10io 2010-10-12 12:09:18

2

如果你只是想用的ID 3你爲什麼不限制你(我的)SQL-衆所周知聲明的問題problem_update名單隻重新調整這些? WHERE problem.problem_id = 3

反正:

foreach($updates->result_array() as $update) { 
    if(3 == $update['problem_id']) { 
     echo $update['problem_update_date'] . ' : ' . $update['problem_update_text']; 
    } 
} 
+0

+1爲建議使用sql查找記錄與'project_id = 3' – Mischa 2010-10-12 11:19:11

+0

只是爲了澄清,因爲這是我現在應該提到的,我已經讀過你的迴應,該視圖的目的是顯示所有問題以及與該問題相關的所有更新。因此,我沒有使用WHERE來縮小我的SQL結果的原因是因爲控制器將所有更新和所有問題都傳遞給視圖。然後,foreach循環遍歷所有問題,並以用戶友好的格式輸出它們,以便所有問題都顯示在一個頁面上。因此,通過數組來查找具有適當問題ID的更新的目的。 – j10io 2010-10-12 12:07:30

+0

感謝這個Maggie :)我剛剛接受了Eugene的迴應,因爲它是一個函數。 – j10io 2010-10-12 12:10:42

0

Maggie是對的:你不應該通過遍歷數組尋找關鍵。只需將project_id = 3作爲SQL中的條件添加即可。

要麼使用get_where()

$query = $this->db->get_where('my_table_name', array('problem_id' => 3)); 

foreach($query->result() as $row) 
{ 
    echo $row->problem_update_date; 
    echo $row->problem_update_text; 
} 

或者where()

$this->db->where('project_id', 3); 
$query = $this->db->get('my_table_name'); 

foreach($query->result() as $row) 
{ 
    echo $row->problem_update_date; 
    echo $row->problem_update_text; 
} 

欲瞭解更多信息檢查大笨文檔:

+0

只是爲了澄清,因爲這是我現在應該提到的,我已經閱讀了您的回覆,該視圖的目的是顯示所有問題以及與該問題相關的所有更新。因此,我沒有使用WHERE來縮小我的SQL結果的原因是因爲控制器將所有更新和所有問題都傳遞給視圖。然後,foreach循環遍歷所有問題,並以用戶友好的格式輸出它們,以便所有問題都顯示在一個頁面上。因此,通過數組來查找具有適當問題ID的更新的目的。 – j10io 2010-10-12 12:08:04

+0

如果您要顯示所有問題和所有更新,則不需要在'problem_id = 3'的數組中搜索*。國際海事組織,更好的方法是迭代所有問題,並使用sql來查找與該問題相關的更新並遍歷它們。 – Mischa 2010-10-12 12:47:18