конкатенация — Как объединить строку в php с условиями?

Я написал запрос в 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&
test_com_check_sep01@INFRASEP01;DB check sep01&
test_com_check_sep01@INFRASEP01;disk space check sep01&
test_com_check_sep02@INFRASEP02;cpu check sep02||
test_com_check_sep02@INFRASEP02;db check sep02||
test_com_check_sep02@INFRASEP02;disk space check sep02||

Как я могу объединить строку как:

"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"

1

Решение

Вы можете сохранить значения в массиве и затем взорваться.

$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);
}
}
0

Другие решения

попробуй это

$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;
0

Предполагая, что вы хотите сохранить отдельные строки для использования, вы можете сделать это

$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];
}

ПРИМЕЧАНИЕ. Я не тестировал этот код, поэтому возможны ошибки.

Если вам не нужен массив $ list, вы можете сделать то, что предложено @Malakiof.

РЕДАКТИРОВАТЬ (22.01.2015): Я улучшил свой ответ, но оставил старый там на случай, если меня неправильно поняли.

//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;
}

Если $ listOfRows очень большой, рассмотрите возможность создания копии $ listOfRows и удаления строк из $ listOfRows при добавлении их в $ concatByServerName.

Хотя это не лучший способ сделать это, я стараюсь сделать его простым, чтобы вы могли заставить его работать, полностью понимая, что происходит. Вы можете легко улучшить этот код, взглянув на свой проект и упростив эти задачи.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector