Мне нужен массив с 6 индексами,
Как выбрать строку и проверить, если не в массиве нажать в?
если в массиве, то выберите следующую строку, пока массив не будет иметь 6 индексов
$data = array();
for ($ii=0; $ii < 6; $ii++) {
$sql = "SELECT * FROM article_category WHERE category_id = :category_id ORDER BY id DESC";
$stmt = $connect_db_article->prepare($sql);
$stmt->bindValue(':category_id', $category_id_array[$i]);
$stmt->execute();
$article_category_row = $stmt->fetch(PDO::FETCH_ASSOC);
if (!in_array($article_category_row['article_id'], $data)) {
array_push($data, $article_category_row['article_id']);
}
}
Вы можете просто зацикливаться, пока sizeof ($ data) == 6, что-то вроде;
$data = array();
$sql = "SELECT * FROM article_category WHERE category_id = :category_id ORDER BY id DESC";
$stmt = $connect_db_article->prepare($sql);
$stmt->bindValue(':category_id', $category_id_array[$i]);
$stmt->execute();
while(sizeof($data) < 6 && $article_category_row = $stmt->fetch(PDO::FETCH_ASSOC)) {
if (!in_array($article_category_row['article_id'], $data))
array_push($data, $article_category_row['article_id']);
}
Вам не нужно повторять ваш запрос каждый раз, у вас всегда будет только один «article_id» в вашем массиве $ data.
Также вы должны защитить свой код с помощью try, catch ()
Вы можете попробовать с этим кодом:
$data = array();
$maxRow = 6;
$cpt = 0 ;
$sql = "SELECT * FROM article_category WHERE category_id = :category_id ORDER BY id DESC";
try {
$stmt = $connect_db_article->prepare($sql);
$stmt->bindValue(':category_id', $category_id_array[$i]);
$stmt->execute();
while($article_category_row = $stmt->fetch(PDO::FETCH_ASSOC) && $cpt < $maxRow) {
if (!in_array($article_category_row['article_id'], $data)) {
array_push($data, $article_category_row['article_id']);
$cpt++;
}
}
}catch(PDOException $pdoException) {
print $pdoException->getMessage();
}
также вы можете делегировать эту обработку на ваш MySql Server с помощью этого SQL-запроса
$sql = "SELECT DISTINCT(article_id) FROM article_category WHERE category_id = :category_id ORDER BY id DESC LIMIT 6";
надеюсь, это поможет