Этот код работает:
$row = array(5,6,89,97,101);
$found = array();
$post = 89;
$count_row = count($row);
for($i = 0; $i < $count_row; $i++){
if($row[$i]==$post){
$found[] = $row[$i-2];
$found[] = $row[$i-1];
$found[] = $row[$i];
$found[] = $row[$i+1];
$found[] = $row[$i+2];
var_dump($found);
}
}
И это не так, вероятно, что-то не так с mysql_fetch_array;
$found = array();
$q = "SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id='$term_tax_id'";
$rs = mysql_query($q) or die(mysql_error());
$row = mysql_fetch_array($rs, MYSQL_NUM);
$count_row = count($row);
for($i = 0; $i < $count_row; $i++){
print_r($row);
if($row[$i]==$post){
$found[] = $row[$i-2];
$found[] = $row[$i-1];
$found[] = $row[$i];
$found[] = $row[$i+1];
$found[] = $row[$i+2];
var_dump($found);
}
}
Ничего не отображается, если количество сообщений больше 1. Кто-нибудь знает способ решить эту проблему?
2 ответа
Оператор select следует переписать так, чтобы возвращались только те значения, которые вы ищете. Один из способов сделать это - сделать UNION
из двух выборок, один из которых возвращает меньшие идентификаторы объекта, а другой - больший. Вам также следует использовать класс WordPress wpdb
. Во-первых, администратор сайта может изменить префикс таблицы с «wp_» на другой; $wpdb->term_relationships
даст правильное имя для таблицы.
$statement = $wpdb->prepare(
" (SELECT object_id
FROM $wpdb->term_relationships
WHERE term_taxonomy_id= %d
AND object_id <= %d
ORDER BY object_id DESC
LIMIT 3)
UNION
(SELECT object_id
FROM $wpdb->term_relationships
WHERE term_taxonomy_id= %d
AND object_id > %d
ORDER BY object_id ASC
LIMIT 2)
ORDER BY object_id", $term_tax_id, $post, $term_tax_id, $post);
$found = $wpdb->get_results($statement);
Это также имеет то преимущество, что работает, когда имеется менее двух отношений терминов до или после центра (объект с идентификатором $post
).
mysql_fetch_array()
выбирает одну строку, которая в вашем случае содержит ровно один столбец.
Вы должны либо запросить все строки из набора результатов сразу (что я не знаю, как это работает), либо вы должны сделать это:
$q = "SELECT object_id FROM wp_term_relationships WHERE term_taxonomy_id='$term_tax_id'";
$rs = mysql_query($q) or die(mysql_error());
$data = array();
while ($row = mysql_fetch_array($rs, MYSQL_NUM)) {
$data[] = $row[0];
}
for($i = 2; $i < count($data) - 2; $i++){ // adjusted boundaries
if($data[$i]==$post){
$found[] = $data[$i-2];
$found[] = $data[$i-1];
$found[] = $data[$i];
$found[] = $data[$i+1];
$found[] = $data[$i+2];
var_dump($found);
}
}
}
Я также скорректировал границы: если вас интересует диапазон от $i-2
до $i+2
, вам следует работать только от 2
до end-2
.
Похожие вопросы
Новые вопросы
php
PHP - это широко используемый высокоуровневый, динамический, объектно-ориентированный и интерпретируемый язык сценариев, в первую очередь предназначенный для серверной веб-разработки. Используется для вопросов о языке PHP.