Этот код работает:

$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. Кто-нибудь знает способ решить эту проблему?

0
Muazam 29 Авг 2011 в 16:01

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).

1
outis 29 Авг 2011 в 12:57

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.

4
glglgl 29 Авг 2011 в 13:21