2012-05-09 43 views
1

我試圖根據不爲空的查詢結果來設置一個數組。反過來,我希望以某種方式創建一個基於NON Null結果的排名。php array array()函數內的語句

SQL查詢返回:

Comp1 Comp2 Comp3 Comp4 Comp5 Comp6 Comp7 Comp8 Comp9 
NULL  NULL 226.97 274 NULL 208  189  NULL 198.99 

我的PHP:

$myarray = 'array(
     if(!empty($COMP1)){ 
     $COMP1,} 
     if(!empty($COMP2)){ 
     $COMP2,} 
     if(!empty($COMP3)){ 
     $COMP3,} 
     if(!empty($COMP4)){ 
     $COMP4,} 
     if(!empty($COMP5)){ 
     $COMP5,} 
     if(!empty($COMP6)){ 
     $COMP6,} 
     if(!empty($COMP7)){ 
     $COMP7,} 
     if(!empty($COMP8)){ 
     $COMP8,} 
     if(!empty($COMP9)){ 
     $COMP9})'; 

$COMP1 = $rankresult['Comp1']; 
$COMP2 = $rankresult['Comp2']; 
$COMP3 = $rankresult['Comp3']; 
$COMP4 = $rankresult['Comp4']; 
$COMP5 = $rankresult['Comp5']; 
$COMP6 = $rankresult['Comp6']; 
$COMP7 = $rankresult['Comp7']; 
$COMP8 = $rankresult['Comp8']; 
$COMP9 = $rankresult['Comp9']; 

,因爲我想只有投入變量不爲空這不起作用所需輸出:

$myarray = array(226.97,274,208,189,198.99) 
+0

您的數據庫設計可能有缺陷。但是,爲什麼不使用原始數組並刪除任何空值? –

+0

我不明白。我應該發佈我的MySQL查詢嗎? – ToddN

+0

@ToddN col1,col2,col3其中'col'是相同的名稱通常是反模式。它表示數據未正確歸一化。 – Corbin

回答

4

你試過array_filter()

$result = array_filter($rankresult); 

結果:

array(
    "comp3"=>226.97, 
    "comp4"=>274, 
    "comp6"=>208, 
    "comp7"=>189, 
    "comp9"=>198.99 
) 
+0

這看起來好像它對我有用,我忘記了'array_filter'函數。 – ToddN

+0

@ToddN:+1。雖然它會起作用,但請注意,這裏有一個更基本的問題。歡迎來到PHP聊天頻道[here](http://chat.stackoverflow.com/rooms/11/php),我們會向你解釋:) –

0

有你,儘管有關使用一個循環?

如果有結果查詢的大小,你可以做這樣的事情:

$myarray=new array(); 
for ($ix=1; $ix<$num_rows; $ix++) { 
    if (${COMP.$ix}!=NULL) 
     array_push($myarray,${COMP.$ix}); 
} 

更新。

+0

或者你可以使用'foreach'來代替'$ rankresult '。 '$ COMP $ ix'也是一個語法錯誤。 –