Извлечь строку ошибки в регулярном выражении Php (функция preg_match_all) - PullRequest
0 голосов
/ 03 ноября 2011

У меня есть массив :

$arr1[0]=SOAP-ENV:Server Market 1
$arr[1]="";
$arr[2]=0;
$arr[3]="|Error : User Name and Password is Failed"

вторая просто нормальная переменная : К я объединить :

$collarr = array_merged($var1,$othervar);
print_r($collarr);

$ collarr результат :

Array ( 
    [0] => SOAP-ENV:Server Market 1| 
    [1] =>
    [2] => 0
    [3] => |Error : User Name and Password is Failed
    [4] => SOAP-ENV:Server Market 2| 0 |Error : Failed Mysql query()) 

я разбираюсь с регулярным выражением

preg_match_all("/[error]+/i",$collarr[0].$collarr[4],$resultarr);

НО Я просто получаю результат:

 Array ( [0] => Array ( [0] => Error [1] => Error ) )

Какой шаблон регулярного выражения лучше всего иметь для результата, например :

"Error Soap-Env:Server market 1: User Name and Password is Failed Server Market"."Error Soap-Env:Server market 2 : Failed Mysql query()"

Спасибо.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Посмотрите на функцию preg_grep, она отфильтровывает массив по указанному шаблону:

$resultarr = preg_grep("/error/i", $collarr);
print_r($resultarr);

Отпечатки для меня:

Array
(
    [3] => |Error : User Name and Password is Failed
    [4] => SOAP-ENV:Server Market 2| 0 |Error : Failed Mysql query()
)
0 голосов
/ 03 мая 2017

Вы можете использовать методы, которые включают preg_match_all() и preg_grep(), но эти функции используют регулярное выражение и, как правило, менее эффективны, чем функции, не основанные на регулярном выражении.

Если вы всегдаимеют ту же структуру данных, которую вы предоставили в своих выборочных массивах, тогда у меня есть решение с одной строкой, которое использует array_filter () , implode () и str_replace () для предоставления желаемой строки для каждого массива ошибок.

$arr1[0]="SOAP-ENV:Server Market 1";
$arr1[1]="";
$arr1[2]=0;
$arr1[3]="|Error : User Name and Password is Failed";

echo $str1=str_replace("|","",implode(' ',array_filter($arr1)));  // declare and echo

echo "<br>";

$arr2[0]="SOAP-ENV:Server Market 2";
$arr2[1]="";
$arr2[2]=0;
$arr2[3]="|Error : Failed Mysql query()";

echo $str2=str_replace("|","",implode(' ',array_filter($arr2)));  // declare and echo

Это выдаст:

SOAP-ENV:Server Market 1 Error : User Name and Password is Failed
SOAP-ENV:Server Market 2 Error : Failed Mysql query()

Вы увидите, что если вы передадите массив из 4 элементов в мой 3-Метод function, он сначала удалит пустые / нулевые / нулевые значения, затем объединит оставшиеся элементы, используя пробел в качестве клея, в строку, в которой будут удалены все символы конвейера.

Если вы собираетесь это сделатьЛюбая конкатенация / комбинация / слияние этих данных, я рекомендую делать это после того, как будет сгенерирована нужная строка.

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

...