如何将php中的字符串与条件连接起来?

如何将php中的字符串与条件连接起来?,php,concatenation,Php,Concatenation,我在php文件中编写了查询,我的查询是: $query = "SELECT cc.NAME complex_check_name,f.name server_name, sgk.NAME single_check_name,cc.operator FROM complex_check cc, lnksinglechecktocomplexcheck lk, single_check

我在php文件中编写了查询,我的查询是:

$query = "SELECT cc.NAME complex_check_name,f.name server_name,
                sgk.NAME single_check_name,cc.operator 
          FROM complex_check cc, 
               lnksinglechecktocomplexcheck lk,
               single_checks sgk,
               functionalci f ,
               lnkconfigurationitemtosinglecheck lkcg 
           WHERE cc.id = lk.complex_check_id AND 
                 sgk.id = lk.single_check_id and 
                 sgk.id = lkcg.single_check_id AND 
                 lkcg.config_item_id = f.id ";

if ($result=mysqli_query($link,$query))
{
    while ($obj=mysqli_fetch_object($result))
    {
       $list= $obj->complex_check_name . 
              "@".
              $obj->server_name .
              ";". 
              $obj->single_check_name . 
              $obj-> operator;

        echo  $list .'<br>'; 
    }
 }
如何将字符串连接为:

"test_com_check_sep01=INFRASEP01;cpu check sep01&INFRASEP01;DBcheck sep01&INFRASEP01;disk space check sep01"

"test_com_check_sep02=INFRASEP02;cpu check sep02||INFRASEP02;db check sep02||INFRASEP02;disk space check sep02"
试试这个

$concat1 = '';
$concat2 = '';
if ($result=mysqli_query($link,$query))
  {
      while ($obj=mysqli_fetch_object($result))
        {
           if($obj->server_name == 'INFRASEP01'){
                concat1 .= $obj->complex_check_name . "@".$obj->server_name .";". $obj->single_check_name . $obj-> operator;
           }else{
                concat2 .= $obj->complex_check_name . "@".$obj->server_name .";". $obj->single_check_name . $obj-> operator;
           }
        }
   }
echo  $concat1 .'<br>'.$concat2; 

假设您想将这些行分开使用,您可以这样做

$list = array("INFRASEP01", "INFRASEP01", "INFRASEP02");
$concatINFRASEP01 = "";
$concatINFRASEP02 = "";
for($lineCounter = 0; $lineCounter < sizeof($list); $lineCounter++)
    if(strpos($list[$lineCounter], "INFRASEP01") !== false){
        //Found it
        $concatINFRASEP01 .= " " . $list[$lineCounter];
    }
    else if(strpos($list[$lineCounter], "INFRASEP02") !== false){
        $concatINFRASEP02 .= " " . $list[$lineCounter];
    }

如果$ListFROWS非常大,考虑将$ListFordRes复制并将$ListFordRes中的行移除为$CutabyServer No.< /P>时删除它们。


虽然这不是最好的方法,但我试图让它保持简单,以便您能够让它工作,同时充分了解正在发生的事情。通过查看您的项目并简化这些任务,您可以轻松地改进此代码。

您可以将值存储到数组中,然后再内爆

$check  =   array();
if($result = mysqli_query($link,$query)) {
        while($obj = mysqli_fetch_object($result)) {
            // If value is not stored in check array proceed
            if(!in_array($obj->complex_check_name,$check))
                $list[$obj->complex_check_name][]   =   $obj->complex_check_name."=";

            $list[$obj->complex_check_name][]   =   $obj->server_name.";".$obj->single_check_name.$obj->operator;

            // Store in check array
            $check[]    =   $obj->complex_check_name;
        }

    // Loop through stored rows and implode with break
    foreach($list as $array) {
            echo implode("<br />",$array);
        }
 }

或者将值收集到一个单独的数组中并内爆。非常感谢您的建议。是的,我想连接obj->server\u name,$obj->single\u check\u name,$obj->operator的值,直到$obj->complex\u check\u name的值发生变化。这些答案对你有用吗?还没有。因为,答案与我真正想要的不同。我想要的是连接obj->server\u name,$obj->single\u check\u name,$obj->operator的值,直到$obj->complex\u check\u name的值改变;ifstrcmp$flag,$obj->complex\u check\u name{//concatenate code is there},但这并不像我预期的那样工作。我如何修改它?谢谢我最初回答了,但删除了我的答案,因为它不是100%正确,我不得不离开。让我再看一下。非常感谢你的建议。是的,我想连接obj->server\u name,$obj->single\u check\u name,$obj->operator的值,直到$obj->complex\u check\u name的值改变。每行由$obj->complex\u check\u name、obj->server\u name、$obj->single\u check\u name、$obj->operator组成。我想连接obj->server\u name,$obj->single\u check\u name,$obj->operator的值,直到$obj->complex\u check\u name的值改变。好的,我试试看。再次感谢你的建议!在$obj->server_的值中,名称总是变化的。它不仅仅是INFRASEP01,INFRASEP02。为了连接obj->server\u name、$obj->single\u check\u name、$obj->operator的值,直到$obj->complex\u check\u name的值发生变化,我编写了如下代码:$flag=$obj->complex\u check\u name;ifstrcmp$flag,$obj->complex\u check\u name{//concatenate code is there},但这并不像我预期的那样有效。在$obj->complex\u check\u name的值更改之前,我如何修改此代码以连接obj->server\u name、$obj->single\u check\u name、$obj->operator的值?您需要决定哪些规则规定哪些行属于哪个连接的字符串。我编写的示例假定所有相同的服务器名称都连接在一起。你的规则是什么?我会改进我的答案,希望它能帮助你。非常感谢你的建议。是的,我想连接obj->server\u name,$obj->single\u check\u name,$obj->operator的值,直到$obj->complex\u check\u name的值改变。每行由$obj->complex\u check\u name、obj->server\u name、$obj->single\u check\u name、$obj->operator组成。我想连接obj->server\u name,$obj->single\u check\u name,$obj->operator的值,直到$obj->complex\u check\u name的值改变。好的,我试试看。再次感谢你的建议!在$obj->server_的值中,名称总是变化的。它不仅仅是INFRASEP01,INFRASEP02。为了连接obj->server\u name、$obj->single\u check\u name、$obj->operator的值,直到$obj->complex\u check\u name的值发生变化,我编写了如下代码:$flag=$obj->complex\u check\u name;ifstrcmp$flag,$obj->complex\u check\u name{//concatenate code is there},但这并不像我预期的那样有效。我如何修改这段代码来连接obj->server\u name,$obj->single\u check\u name,$obj->operator的值,直到$obj->complex\u check\u name的值改变为止?也许可以将答案标记为正确,这样当问题已经解决时就没有人来尝试解决问题了。是的,你是对的。我需要把答案划为正确。我试图把答案划为正确。但是,我找不到我能做到的地方。谢谢谢谢这个问题通过@Rasclatt建议解决了。谢谢!答案旁边应该是一个空白的复选标记,点击它,它应该变成绿色OK,是的,我做了,问题已经回答了。谢谢!祝您有个美好的一天!
//In your case the rows come from the $obj (which most would call $row)
$listOfRows = array("test_com_check_sep01@INFRASEP01;cpu check sep01&","test_com_check_sep01@INFRASEP01;DB check sep01&", "test_com_check_sep02@INFRASEP02;cpu check sep02||");

//Create this array as you go through each row by adding the server_name
//to this array. You can skip making this array and simply make the
//unique array by checking if the array contains the server_name.
$listServerNames = array("INFRASEP01","INFRASEP02","INFRASEP01", "INFRASEP02", "INFRASEP01");

//Only have unique server names to avoid duplicates
$listUniqueServerNames = array_unique($listServerNames);

//this will be your list of concatenated strings
$concatByServerName = array();

//Go through the unique server names one by one
foreach($listUniqueServerNames as $serverName)
//While looking at each unique server name, look through the rows
foreach($listOfRows as $line)
if(strpos($line, $serverName) !== false){
    //Found it
if(array_key_exists($serverName, $concatByServerName))
    $concatByServerName[$serverName] .= " " . $line;
else
    $concatByServerName[$serverName] = $line;
}
$check  =   array();
if($result = mysqli_query($link,$query)) {
        while($obj = mysqli_fetch_object($result)) {
            // If value is not stored in check array proceed
            if(!in_array($obj->complex_check_name,$check))
                $list[$obj->complex_check_name][]   =   $obj->complex_check_name."=";

            $list[$obj->complex_check_name][]   =   $obj->server_name.";".$obj->single_check_name.$obj->operator;

            // Store in check array
            $check[]    =   $obj->complex_check_name;
        }

    // Loop through stored rows and implode with break
    foreach($list as $array) {
            echo implode("<br />",$array);
        }
 }