преобразовать массив в отдельные строки

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

$formatsArray = $_POST['formats']; $topicsArray = $_POST['topics']; 

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

  $resources = "select * from resources where stage LIKE '%".$stage."%' AND format LIKE '%".$formats."%'"; $run_query = mysqli_query($con, $resources); 

Это связано с тем, что формат ожидает отдельную строку для сравнения, например, позволяет предположить, что массив ["video", "blogs", "articles"] , он не будет работать, если формат следует сравнивать с video,blogs,articles но скорее видео, блоги или статьи.

Надеюсь, это ясно, и для каких-либо разъяснений, пожалуйста, сообщите.

Всего наилучшего,

Обновить:

 $formats = explode(',', $formatsArray); $topics = explode(',', $topicsArray); $resources = "select * from resources where stage LIKE '%".$stage."%' AND format LIKE '%".$formats."%' AND topic LIKE '%".$topics."%' "; 

Обновить:

 $run_query = mysqli_query($con, $resources); while($row = mysqli_fetch_array($run_query)) { $data[] = array( 'format' => $row['format'], 'title' => $row['title'], 'costs' => $row['cost'], 'stage' => $row['stage'], 'topic' => $row['topic'], 'link' => $row['link'] ); } 

Обновить

  include('db.php'); $query = 'select * from resources where '; $query .= 'stage LIKE :stage and'; $execute[':stage'] = '%' . $stage . '%'; if(!empty($_POST['formats'])){ foreach($_POST['formats'] as $key => $format) { $query .= 'format LIKE :format' . $key . ' and '; $execute[':format' . $key] = '%' . trim($format) . '%'; } } if(!empty($_POST['topics'])){ foreach($_POST['topics'] as $key => $topic) { $query .= 'topic LIKE :topic' . $key . ' and '; $execute[':topic' . $key] = '%' . trim($topic) . '%'; } } $query = rtrim($query, ' and '); if(!empty($execute)) { $stmt = $con->prepare($query); $stmt->execute($execute); } else { echo 'You must search for something'; } while($row = mysqli_fetch_array($query)) { $data[] = array( 'format' => $row['format'], 'title' => $row['title'], 'costs' => $row['cost'], 'stage' => $row['stage'], 'topic' => $row['topic'], 'link' => $row['link'] ); } в  include('db.php'); $query = 'select * from resources where '; $query .= 'stage LIKE :stage and'; $execute[':stage'] = '%' . $stage . '%'; if(!empty($_POST['formats'])){ foreach($_POST['formats'] as $key => $format) { $query .= 'format LIKE :format' . $key . ' and '; $execute[':format' . $key] = '%' . trim($format) . '%'; } } if(!empty($_POST['topics'])){ foreach($_POST['topics'] as $key => $topic) { $query .= 'topic LIKE :topic' . $key . ' and '; $execute[':topic' . $key] = '%' . trim($topic) . '%'; } } $query = rtrim($query, ' and '); if(!empty($execute)) { $stmt = $con->prepare($query); $stmt->execute($execute); } else { echo 'You must search for something'; } while($row = mysqli_fetch_array($query)) { $data[] = array( 'format' => $row['format'], 'title' => $row['title'], 'costs' => $row['cost'], 'stage' => $row['stage'], 'topic' => $row['topic'], 'link' => $row['link'] ); } 

Не обращая внимания на необходимость подготовленных заявлений, вы можете:

  $formats = implode('","', $formatsArray); $topics = implode('","', $topicsArray); $resources = "select * from resources where stage LIKE '%".$stage."%' AND format IN(".$formats.") AND topic IN(\"".$topics."\") "; 

Добавляя " до и после каждого , когда вы implode каждый массив, ваш массив стал бы, например,

 video","blogs","articles 

Итак, нам нужно добавить " к началу и концу каждого списка IN что сделает окончательный запрос следующим:

 select * from resources where stage LIKE '%".$stage."%' AND format IN("video","blogs","articles") AND ... 

Я думаю, это сделало бы это. Это также разрешит отверстие для инъекций с помощью подготовленных инструкций.

 $query = 'select * from resources where '; if(!empty($_POST['formats'])){ foreach($_POST['formats'] as $key => $format) { $query .= 'stage LIKE :stage' . $key . ' or '; $execute[':stage' . $key] = '%' . trim($format) . '%'; } } if(!empty($_POST['topics'])){ foreach($_POST['topics'] as $key => $topic) { $query .= 'topic LIKE :topic' . $key . ' or '; $execute[':topic' . $key] = '%' . trim($topic) . '%'; } } $query = rtrim($query, ' or '); if(!empty($execute)) { echo $query; print_r($execute); //$stmt = $mysqli->prepare($query); //$stmt->execute($execute); } else { echo 'You must search for something'; } 

Дает вам запрос

выберите * из ресурсов, где этап LIKE: stage0 или stage LIKE: stage1 или тема LIKE: topic0 или тема LIKE: topic1 или тема LIKE: topic2 или тема LIKE: topic3

и связанные значения:

 Array ( [:stage0] => %test% [:stage1] => %test1% [:topic0] => %value1% [:topic1] => %value2% [:topic2] => %value3% [:topic3] => %value4% ) 

Вот начальный код, который у меня был, когда я думал, что данные были спарены ..

 foreach($formats as $key => $format) { $topic = $topics[$key]; $query .= '(stage LIKE :stage' . $key . ' and topic LIKE :topic' . $key . ') or '; $execute[':stage' . $key] = '%' . trim($format) . '%'; $execute[':topic' . $key] = '%' . trim($topic) . '%'; } 

Несколько ссылок на подготовленные заявления:
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
http://php.net/manual/en/mysqli.prepare.php
http://php.net/manual/en/mysqli-stmt.execute.php