Это звучит так просто, но по какой-то причине это не работает с моей стороны. У меня есть массив, который проверяет, существуют ли значения, и будет действовать соответственно

Мой массив содержит значения, и мое условие предназначено для проверки 2 условий, если значение «a» содержится в массиве с индексом массива 0, а «b» не существует в массиве, тогда сделайте это. если значение «a» с индексом 0 и «b» действительно существует, запустите другой блок кода.

//THIS CONTAINS ALL THE FIELDS SELECTED
$report_cols = $_POST['report_cols'];
$percent_amt= explode(",",$report_cols);
$n_fields_arr = array();
$b=0;
//This checks if b exists in array
if (array_key_exists('`b`', $percent_amt)) 
{
  $b = 1;
}

if($percent_amt[0] == '`a`' && $b == 0)
{
$report_cols = str_replace("`a`,","",$report_cols);
$report_cols = str_replace(",`a`","",$report_cols);
$report_cols = str_replace(",,",",",$report_cols);
array_push($n_fields_arr,"a");
echo "done";    
}
if($percent_amt[0] == '`a`' && $b == 1)
{
$report_cols = str_replace("`a`,","",$report_cols);
$report_cols = str_replace(",`a`","",$report_cols);
$report_cols = str_replace(",,",",",$report_cols);
$report_cols = str_replace("`b`,","",$report_cols);
$report_cols = str_replace(",`b`","",$report_cols);
$report_cols = str_replace(",,",",",$report_cols);
array_push($n_fields_arr,"a","b");
echo "Done AB"; 
}

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

0
Taps101 23 Фев 2016 в 13:54

2 ответа

Лучший ответ

Функция explode() взрывает массив с помощью цифровых клавиш.

Используйте in_array(), чтобы проверить b.

if (in_array('b', $percent_amt)) 
{
  $b = 1;
}
2
Apoorv 23 Фев 2016 в 11:58

Вы можете использовать strpos для поиска вхождения строки в строке. И используйте массив в качестве аргумента поиска для str_replace. Это упростит ваш код.

//$report_cols = $_POST['report_cols'];
$report_cols = '`a`,`foo`,`a`,`b`,`bar`,`b`,';
$n_fields_arr = array();

$b_found = strpos($report_cols, '`b`') !== false ? true : false;
$a_start = strpos($report_cols, '`a`') == 0      ? true : false;

if ($a_start) {
    $report_cols = str_replace(array('`a`','`b`'), '', $report_cols);
    $report_cols = trim(preg_replace('/,+/', ',', $report_cols), ',');
    $n_fields_arr[] = 'a';
    if ($b_found) {
        $n_fields_arr[] = 'b';
    }
}
print $report_cols;
var_dump($n_fields_arr);

Выход:

`foo`,`bar`

array (size=2)
  0 => string 'a' (length=1)
  1 => string 'b' (length=1)
0
Progrock 23 Фев 2016 в 12:00