2015-03-27 4 views
0

Утра,PHP - Перебор всех записей в таблице

У меня есть таблица с именем wp_cam_rules, который имеет два поля в нем (два, что я заинтересован в) они rule_exclude_values и rule_include_values. Примерно 100 записей в wp_cam_rules. rule_exclude_values и rule_include_values содержат список, разделенный запятой.

Что я хочу сделать, используя php, представляет собой цикл через каждую из строк и проверяет некоторые критерии.

В основном функция примет строку ($ x), проверьте, содержит ли эта строка любое исключающее слово (rule_exclude_values). Если он не проверяет, содержит ли он какие-либо слова включения (rule_include_values) и соответствующим образом печатает текст.

Проблема, с которой я столкнулся в данный момент, заключается в том, что код, кажется, останавливается после первой записи и не зацикливается, пожалуйста, кто-нибудь может помочь?

Вот код:

function get_attributes($x) { 


$sql = "SELECT * FROM wp_wcam_rules"; 
$result = mysql_query($sql) or die(mysql_error()); 

$attribute_results= array(); 

while($row = mysql_fetch_assoc($result)) { 

$attribute_results[] = $row; 

} 

foreach ($attribute_results as $row) { 

    $exclude_words = $row['rule_exclude_values']; 
    $include_words = $row['rule_include_values']; 

    foreach ($exclude_words as $exclude_value) { 

     if (stripos($x,$exclude_value)===false) { 
      $skip_word = false; 
     } else { 
      $y.= 'Excluded: '.$exclude_value; 
      $skip_word = true; 
      break; 
     } 
} 

if ($skip_word ===false) { 
     foreach ($include_words as $include_value) { 

      if (stripos($x,$include_value) !== false) { 

       $y .= 'Attribute Found: '.$include_value; 
       continue; 
      } 

     } 
} 


return $y; 
} 
} 

Благодаря Chris

+0

Почему вы делаете то время цикла, поместите все строки внутри него, а затем цикл через все строки снова? Почему бы вам просто не взять петлю сразу? – Xatenev

ответ

1

Вы слишком рано break в вашем коде
Кроме того, вы не должны использовать этот флаг $skip_word ...

Попробуйте ввести код

<?php 
function get_attributes($x) { 
    $sql = "SELECT * FROM wp_wcam_rules"; 
    $result = mysql_query($sql) or die(mysql_error()); 
    $attribute_results= array(); 
    while($row = mysql_fetch_assoc($result)) { 
     $attribute_results[] = $row; 
    } 

    foreach ($attribute_results as $row) { 
     $exclude_words = $row['rule_exclude_values']; 
     $include_words = $row['rule_include_values']; 

     $y = ''; 
     foreach ($exclude_words as $exclude_value) { 
      $y.= 'Excluded: '.$exclude_value; 
      foreach ($include_words as $include_value) { 
       if (stripos($x,$include_value) !== false) { 
        $y .= 'Attribute Found: '.$include_value; 
       } 
      } 
     } 
    } 
    return $y; 
} 
+0

(Если у вас есть время для улучшения, вы можете удалить внешний цикл foreach :). – Xatenev

+0

Спасибо за помощь. Я удалил внешний цикл, он сработал! – Walshie1987

1

Кажется, вам нужно использовать explode функции

$exclude_words = explode(',', $row['rule_exclude_values']); 
Смежные вопросы