2017-06-09 41 views
0

我想分開行,如所有受影響的行,其列值爲「x」,列值爲「y」等。如何在php中分別獲取相同列值的行?

例如:一個表的列名稱爲「月」。我想顯示所有受影響的行爲'1月',這是'二月',並由此我想分別顯示他們的月份名稱的行。

 
Sample Input: 

title month 
a  Jan 
b  Feb 
c  Feb 
d  Jan 
e  Mar 
f  Jan 
g  Feb 
h  Jan 
i  Mar 

Expected Output: 

Jan: 
    a 
    d 
    f 
    h 
Feb: 
    b 
    c 
    g 
Mar: 
    e 
    i 

我找不到任何想法來解決這個問題。誰能幫幫我嗎?

+0

幾個不同的方法是可能的,但我會看看array_filter。 – mkaatman

+0

更新您的問題添加正確的數據樣本和預期結果 – scaisEdge

+0

受影響的行是什麼意思?再說一句你的問題.. – avisheks

回答

0

沒有代碼,這是我對你之後的最好解釋。

你有一些數組,你想要在其中一個元素值上拆分數組。

<?php 

$array[0]['Month'] = 'January'; 
$array[0]['Activity'] = 'Sledding'; 
$array[1]['Month'] = 'January'; 
$array[1]['Activity'] = 'New years party'; 
$array[2]['Month'] = 'February'; 
$array[2]['Activity'] = 'Find a SO'; 
$array[3]['Month'] = 'February'; 
$array[3]['Activity'] = 'Celebrate Valentines'; 

$january = array_filter($array, function($item){ 
    return $item['Month'] === 'January'; 
}); 

$february = array_filter($array, function($item){ 
    return $item['Month'] === 'February'; 
}); 

echo "Jan:"; 
var_dump($january); 

echo "\n\nFeb:"; 
var_dump($february); 

產量:

Jan:array(2) { 
    [0]=> 
    array(2) { 
    ["Month"]=> 
    string(7) "January" 
    ["Activity"]=> 
    string(8) "Sledding" 
    } 
    [1]=> 
    array(2) { 
    ["Month"]=> 
    string(7) "January" 
    ["Activity"]=> 
    string(15) "New years party" 
    } 
} 


Feb:array(2) { 
    [2]=> 
    array(2) { 
    ["Month"]=> 
    string(8) "February" 
    ["Activity"]=> 
    string(9) "Find a SO" 
    } 
    [3]=> 
    array(2) { 
    ["Month"]=> 
    string(8) "February" 
    ["Activity"]=> 
    string(20) "Celebrate Valentines" 
    } 
} 

http://sandbox.onlinephpfunctions.com/code/a86fb26f3a619dff8fd7649f992ba9d6af38b9b5

+0

其實我想從mysql查詢 –

+0

啊,我不確定你爲什麼標記它PHP如果你只是在尋找查詢幫助。 – mkaatman

0

這裏:

select 
month, title 
from 
<table> 
order by month; 

這將一起給你一個月的稱號。

Month Title 
Jan  a 
Jan  d 
Jan  f 
Jan  h 
Feb  b 
Feb  c 
Feb  g 
Mar  e 
Mar  i 
+0

但是如何顯示月份的標題? –

+0

這會給你明智的標題。 – avisheks

0
SELECT * FROM table_name GROUP BY Month 

將是一個有效的qwery,但是。如果您希望類似於您添加的示例,則可以首先列出月份列中的不同項目,然後在列出第一個結果的同時循環顯示第一個結果的行。

本想這樣做:

<?php 
     @ $db = new mysqli('localhost', 'user', 'password', 'database'); 
    $query = "SELECT DISTINCT Month from Table1"; 
    $result = $db->query($query); 

    while ($data = $result->fetch_row()) { 
    echo '<table align="left"><tr>'; 
    for ($j=0; $j<$result->field_count; $j++) { 
    echo '<th>'.$data[$j].': </th><tr><td>'; 
     $rowquery = "SELECT title from Table1 where Month='".$data[$j]."'"; 
     $rowresult = $db->query($rowquery); 
     echo '<table >'; 
     while ($rowdata = $rowresult->fetch_row()) { 
      echo '<tr align="right">'; 
       for ($k=0; $k<$rowresult->field_count; $k++) { 
       echo '<td>'.$rowdata[$k].'</td>'; 
     } 
     echo '</tr>'; 
     } 
     echo '</table>';  

     } 
     echo '</td></tr></table>'; 
     } 

    ?> 
+0

但是如何以這種方式顯示分隔的組名? –

+0

我改變了我的答案以匹配添加到問題中的示例 –

0

這是我可以不看你的代碼

$array = array( 
'a' =>  'Jan', 
'b' => 'Feb', 
'c' => 'Feb', 
'd' => 'Jan', 
'e' => 'Mar', 
'f ' => 'Jan', 
'g' => 'Feb', 
'h' => 'Jan', 
'i' => 'Mar' 
      ); 
$result=array();    
foreach($array as $key => $value){ 
    if(array_key_exists($value,$result)){ 
     $result[$value] .= ','.$key; 
    } else { 
     $result[$value] = $key; 
    } 
} 

做,這是輸出

Array 
(
    [Jan] => a,d,f ,h 
    [Feb] => b,c,g 
    [Mar] => e,i 
) 
相關問題