我正在尝试创建动态表视图。我有两个数组。如果匹配,我想创建一个字符串。
以下是数组:
(
[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"
答案 0 :(得分:0)
如果可以的话,将数组展平,所以不是$ array [0] [20],而是简单地通过$ array [20]访问它。
然后你可以循环遍历你需要的选项id,拉出字符串并将其附加到主sql字符串,同时附加一个','。 在循环之后,您可以只是rtrim($ string,“,”)删除最后的逗号
答案 1 :(得分:0)
只是看着它,我不认为你需要按照你的方式去做(使用数组中的完整语句)。声明中只有两件事情发生了变化,因此将id
和alias
放入数组并找到它:
<?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";
?>
以上将为您提供查询语句。你也可以设置一个函数来递归地连接一个语句列表:
<?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";
?>