2016-03-21 2 views
2

Например:Как я могу тянуть несколько значений переменных из строки (PHP)

$string = "AND (pr.StatusCode <> 'U') AND ((pr.pkBrand = 9) OR (pr.pkBrand = 70)) AND ((pr.pkCategory = 55) OR (pr.pkCategory = 56)) AND (pr.StatusCode <> 'D')"; 

мне нужно тянуть значение ассоциировать с pkBrand т.е. 9 & 70 нажать в массив для использования в других местах и значения pkCategory, т.е. 55 & 56, в отдельный массив снова для использования в другом месте.

Как это сделать, пожалуйста.

ответ

1

это гораздо менее кратким, но она стремится работать независимо от названия поля:

<?php 
$string = "AND (pr.StatusCode <> 'U') AND ((pr.pkBrand = 9) OR (pr.pkBrand = 70)) AND ((pr.pkCategory = 55) OR (pr.pkCategory = 56)) AND (pr.StatusCode <> 'D')"; 
$newString=trim(str_replace(')','',str_replace('(','',str_replace('OR','',str_replace('AND','',$string))))); 
$tab=explode('pr.',$newString); 
foreach($tab as $value) { 
$value=trim(str_replace(' ','',str_replace('\'','',$value))); 
$tab2[]=$value; 
} 
/*echo '<pre>'; 
var_dump($tab2); 
echo '</pre>';*/ 
$operators=['!=','<>','<','>','=']; 
foreach ($tab2 as $index=>$value) { 
foreach ($operators as $operator) { 
    $found=0; 
    $explode=explode($operator,$value); 
    if (count($explode)==1) {}//not the good one 
    else { 
     $found=1; 
     break; 
    } 
} 
if ($found==1) $newTab[$explode[0]][$index]=$explode[1]; 
} 


echo '<pre>'; 
var_dump($newTab); 
echo '</pre>'; 

?> 

Даст вам:

array(3) { 
    ["StatusCode"]=> 
    array(2) { 
    [1]=> 
    string(1) "U" 
    [6]=> 
    string(1) "D" 
    } 
    ["pkBrand"]=> 
    array(2) { 
    [2]=> 
    string(1) "9" 
    [3]=> 
    string(2) "70" 
    } 
    ["pkCategory"]=> 
    array(2) { 
    [4]=> 
    string(2) "55" 
    [5]=> 
    string(2) "56" 
    } 
} 
+0

ваш код дает мне ошибку: Ошибка синтаксиса: неожиданный '[' in ... для этой строки $ operator = ['! =', '<>', '<','>', '=']; –

+0

никаких ошибок для меня. Можете ли вы дать мне полное сообщение об ошибке? – butterFlyNick

+0

Ошибка анализа: синтаксическая ошибка, неожиданная '[' в /Users/***/Sites/***/_plugins/site-pages/public/add-a-model-pages/manage-models.php в строке 547 строка 547 - это $ operator = ['! =', '<>', '<','>', '=']; –

3

Может быть, вы можете сделать что-то вроде этого:

$string = "AND (pr.StatusCode <> 'U') AND ((pr.pkBrand = 9) OR (pr.pkBrand = 70)) AND ((pr.pkCategory = 55) OR (pr.pkCategory = 56)) AND (pr.StatusCode <> 'D')"; 
preg_match_all("/pr.pkBrand = (\d+)|pr.pkCategory = (\d+)/", $string, $matches, PREG_SET_ORDER); 

$matches массив будет выглядеть следующим образом:

array(4) { [0] => array(2) { [0] => string(14) "pr.pkBrand = 9" [1] => string(1) "9" } [1] => array(2) { [0] => string(15) "pr.pkBrand = 70" [1] => string(2) "70" } [2] => array(3) { [0] => string(18) "pr.pkCategory = 55" [1] => string(0) "" [2] => string(2) "55" } [3] => array(3) { [0] => string(18) "pr.pkCategory = 56" [1] => string(0) "" [2] => string(2) "56" } }

Затем вы можете извлечь значения, которые вы хотите от этого.

+0

спасибо я могу быть в состоянии использовать это. –

Смежные вопросы