2015-11-02 39 views
-1

我有一个包含$lang关键字查询字符串,现在我想$lang之前取代一切,直到'符号的第一次出现使用循环另一个数组的内容。从更换位置匹配所有匹配的字符串到第一个'符号

下面是我的查询字符串:

select 
COUNT(t1.id) as total, 
COUNT(t1.id) as 'total_$lang', 
CASE t2.`precence` 
     WHEN '0' THEN 'Absent' 
     WHEN '1' THEN 'Present' 
     ELSE 'Unknown' 
    END AS series, 
CONCAT(DAYNAME(t1.date),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS ticks, 
CONCAT(DATE_FORMAT(t1.date, '%a'),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS abv, 
    courses.no AS label, 
CASE t2.`precence` 
     WHEN '0' THEN 'absent_$lang' 
     WHEN '1' THEN 'present_$lang' 
     ELSE 'unknown_$lang' 
    END AS 'attendance_state_$lang', 
CONCAT(DAYNAME(t1.date),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS 'attendance_date_$lang', 
CONCAT(DATE_FORMAT(t1.date, '%a'),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS 'attendance_date_abv_$lang', 
courses.no AS 'course_num_$lang' 

from course_attendances as t1 left join `student_attendances` as t2 on t2.`course_attendance_id` = t1.`id` 
right join courses ON courses.id = t1.course_id 
where t1.`course_id` = '1' AND t1.date BETWEEN '2015-01-01' AND '2015-11-02' 
group by t1.`date`,t2.`precence` 

现在我想用下面阵列

Array 
(
    [total_en] => Total 
    [absent_en] => Absent 
    [present_en] => Present 
    [unknown_en] => Unknown 
    [attendance_state_en] => Attendance State 
    [attendance_date_en] => Attendance Date 
    [attendance_date_abv_en] => Attendance Date (abv) 
    [course_num_en] => Course Number 
) 

的内容替换这正是我需要的问题的查找匹配的情况下部分,任何帮助表示感谢。

+0

@BePearlKahan我用波纹管声明的符号后得到的每一件事情的结果'$ start_pos = strpos($ string,'\'');返回(substr($ string,$ start_pos + strlen('\'')));'和这个语句用于在符号或字符前面提取每一个元素'$ end_pos = strpos($ string,'_ $ lang');返回(substr($字符串,$ start_pos,$ end_pos));'但我怎么能结合他们? – jones

回答

0

你可以这样做

// Your query string 
$main_query = "SELECT 
        COUNT(t1.id) as total, 
        COUNT(t1.id) as 'total_$lang', 
        CASE t2.`precence` 
        WHEN '0' THEN 'Absent' 
        WHEN '1' THEN 'Present' 
        ELSE 'Unknown' 
       END AS series, 
       CONCAT(DAYNAME(t1.date),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS ticks, 
       CONCAT(DATE_FORMAT(t1.date, '%a'),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS abv, 
       courses.no AS label, 
       CASE t2.`precence` 
        WHEN '0' THEN 'absent_$lang' 
        WHEN '1' THEN 'present_$lang' 
        ELSE 'unknown_$lang' 
       END AS 'attendance_state_$lang', 
       CONCAT(DAYNAME(t1.date),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS 'attendance_date_$lang', 
       CONCAT(DATE_FORMAT(t1.date, '%a'),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS 'attendance_date_abv_$lang', 
       courses.no AS 'course_num_$lang' 

      FROM course_attendances as t1 left join `student_attendances` as t2 on t2.`course_attendance_id` = t1.`id` 
      RIGHT JOIN courses ON courses.id = t1.course_id 
      WHERE t1.`course_id` = '1' AND t1.date BETWEEN '2015-01-01' AND '2015-11-02' 
      GROUP BY t1.`date`,t2.`precence`"; 

而且你的数据样本阵列

$reportConfig = Array 
    (
     'total_en' => 'Total', 
     'absent_en' => 'Absent', 
     'present_en' => 'Present', 
     'unknown_en' => 'Unknown', 
     'attendance_state_en' => 'Attendance State', 
     'attendance_date_en' => 'Attendance Date', 
     'attendance_date_abv_en' => 'Attendance Date (abv)', 
     'course_num_en' => 'Course Number' 
    ); 


if(preg_match('/_\$lang/',$main_query)){ 
    foreach($reportConfig as $rep_conf_key=>$rep_conf_val){ 
     $rep_conf_key_temp = preg_replace('/_'.$lang.'/','_\\\$lang',$rep_conf_key); 
     if(preg_match('/'.$rep_conf_key_temp.'/',$main_query)){ 
      $main_query = preg_replace('/'.$rep_conf_key_temp.'/',$rep_conf_val,$main_query); 
     } 
    } 

} 
echo '<pre/>'; print_r($main_query); 

而且

SELECT 
COUNT(t1.id) as total, 
COUNT(t1.id) as 'Total', 
CASE t2.`precence` 
     WHEN '0' THEN 'Absent' 
     WHEN '1' THEN 'Present' 
     ELSE 'Unknown' 
    END AS series, 
CONCAT(DAYNAME(t1.date),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS ticks, 
CONCAT(DATE_FORMAT(t1.date, '%a'),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS abv, 
    courses.no AS label, 
CASE t2.`precence` 
     WHEN '0' THEN 'Absent' 
     WHEN '1' THEN 'Present' 
     ELSE 'Unknown' 
    END AS 'Attendance State', 
CONCAT(DAYNAME(t1.date),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS 'Attendance Date', 
CONCAT(DATE_FORMAT(t1.date, '%a'),' ',DATE_FORMAT(t1.date,'%Y %M %d')) AS 'Attendance Date (abv)', 
courses.no AS 'Course Number' 

FROM course_attendances as t1 left join `student_attendances` as t2 on t2.`course_attendance_id` = t1.`id` 
RIGHT JOIN courses ON courses.id = t1.course_id 
WHERE t1.`course_id` = '1' AND t1.date BETWEEN '2015-01-01' AND '2016-11-17' 
GROUP BY t1.`date`,t2.`precence`