2011-10-29 134 views
1

我正在嘗試創建動態表視圖。我有兩個數組。如果匹配,我想創建一個字符串。在PHP中比較數組

這裏是數組:

(
    [0] => 20 
    [optionid] => 20 
) 
Array 
(
[0] => Array 
    (
     [1] => GROUP_CONCAT(if(optionid = 1, value_name, NULL)) AS 'Color' 
    ) 

[1] => Array 
    (
     [22] => GROUP_CONCAT(if(optionid = 22, value_name, NULL)) AS 'Crystal Color' 
    ) 

[2] => Array 
    (
     [25] => GROUP_CONCAT(if(optionid = 25, value_name, NULL)) AS 'Gauge' 
    ) 

[3] => Array 
    (
     [35] => GROUP_CONCAT(if(optionid = 35, value_name, NULL)) AS 'Height' 
    ) 

[4] => Array 
    (
     [18] => GROUP_CONCAT(if(optionid = 18, value_name, NULL)) AS 'Length' 
    ) 

[5] => Array 
    (
     [33] => GROUP_CONCAT(if(optionid = 33, value_name, NULL)) AS 'Pieces in Pack' 
    ) 

[6] => Array 
    (
     [26] => GROUP_CONCAT(if(optionid = 26, value_name, NULL)) AS 'Pincher Size' 
    ) 

[7] => Array 
    (
     [24] => GROUP_CONCAT(if(optionid = 24, value_name, NULL)) AS 'Rack' 
    ) 

[8] => Array 
    (
     [20] => GROUP_CONCAT(if(optionid = 20, value_name, NULL)) AS 'Ring Size' 
    ) 

[9] => Array 
    (
     [2] => GROUP_CONCAT(if(optionid = 2, value_name, NULL)) AS 'Size' 
    ) 

[10] => Array 
    (
     [34] => GROUP_CONCAT(if(optionid = 34, value_name, NULL)) AS 'Size in Pack' 
    ) 

例如,第一陣列上的值20上的第二匹配鍵20,從而我想把這個值添加到一個字符串中。如果他們超過兩場比賽,我想要追加字符串。

最終的結果應該像

$string = "GROUP_CONCAT(if(optionid = 20, value_name, NULL)) AS 'Ring Size'" 

如果超過一個匹配。

$string = "GROUP_CONCAT(if(optionid = 20, value_name, NULL)) AS 'Ring Size', NEXT MATCHED VALUE" 
+3

我在一段時間看到的最尷尬的陣列結構的輕鬆之一。爲什麼索引到處都是? – NullUserException

+0

第二個數組子陣列上的索引是我試圖匹配到第一個數組的一個屬性。第一個數組是mysql結果。我建立了第二個,所以如果有幫助,我可以改變它。 – Busilinks

回答

0

拼合陣列出如果可以,所以不是$數組[0] [20],其簡單地通過$陣列[20]訪問。

然後,您可以遍歷所需的選項ID,將字符串拉出並附加到主SQL字符串,並附加','。 循環之後,您可以只RTRIM($字符串,「」)刪除最後一個逗號

0

只是看着它,我不認爲你需要做你正在做的方式(在數組中有完整的語句)。這裏只有兩件事情是,在聲明中改變,這樣就把idalias到一個數組中,發現由:

<?php 

function getConcat($id) { 
    $group = "GROUP_CONCAT(if(optionid = %d, value_name, NULL)) AS `%s`"; 

    $groups = array(
     1 => 'Color', 
     2 => 'Size', 
     18 => 'Length', 
     20 => 'Ring Size', 
     22 => 'Crystal Color', 
     24 => 'Rack', 
     25 => 'Gauge', 
     26 => 'Pincher Size', 
     33 => 'Pieces in Pack', 
     34 => 'Size in Pack', 
     35 => 'Height' 
    ); 

    if ((!is_string($id) && !is_numeric($id)) || !isset($groups[$id])) { 
     return ''; 
    } 

    return sprintf($group, $id, $groups[$id]); 
} 

echo getConcat(22)."\n\n"; 
echo getConcat(50)."\n\n"; 
echo getConcat(35)."\n\n"; 
echo getConcat(18)."\n\n"; 
echo getConcat(1)."\n\n"; 

?> 

http://codepad.org/n1eCdv4H

上述會給你的查詢語句。你可以設置一個功能也遞歸串聯的語句列表,以及:

<?php 

function getConcatList($arrList=array(), $strList=NULL) { 
    $group = "GROUP_CONCAT(if(optionid = %d, value_name, NULL)) AS `%s`"; 

    if (!is_string($arrList) && !is_numeric($arrList) && !is_array($arrList)) { 
     return ''; 
    } else if (is_string($arrList) || is_numeric($arrList) && !empty($arrList)) { 
     $arrList = array($arrList); 
    } 

    $groups = array(
     1 => 'Color', 
     2 => 'Size', 
     18 => 'Length', 
     20 => 'Ring Size', 
     22 => 'Crystal Color', 
     24 => 'Rack', 
     25 => 'Gauge', 
     26 => 'Pincher Size', 
     33 => 'Pieces in Pack', 
     34 => 'Size in Pack', 
     35 => 'Height' 
    ); 

    $c_list = array_shift($arrList); 

    if ($groups[$c_list]) { 
     $c_strList = sprintf($group, $c_list, $groups[$c_list]); 

     if (strlen($strList)) { 
      $c_strList = "$strList, $c_strList"; 
     } 
    } else { 
     $c_strList = $strList; 
    } 

    if (!count($arrList)) { 
     return $c_strList; 
    } 

    return getConcatList($arrList, $c_strList); 
} 

echo getConcatList(22)."\n\n"; 
echo getConcatList(50)."\n\n"; 
echo getConcatList(array(35, 33))."\n\n"; 
echo getConcatList(array(1, 18, 35, 33))."\n\n"; 
echo getConcatList(array(1, 18, 70, 35, 33))."\n\n"; 

?> 

http://codepad.org/jsIFpWkt