Категоризация неидентифицированных категорий PHP цикла - PullRequest
0 голосов
/ 11 октября 2009

В моем проекте есть различные результаты поиска разных типов контента. По неважным причинам не все типы контента имеют уникальный идентификатор. Однако я попытался написать этот цикл, который будет определять типы контента без идентификаторов и давать им уникальный идентификатор.

В основном результаты выглядят так:

  • ID категории 3
  • ID категории 3
  • ID категории 4
  • НЕ-ID Категория 1
  • НЕидентификационная категория 2

[...]

Я пробовал это:

$current = $result->section;                        
// if there's a category ID -- use it
if ($current != null) echo $result->sectionid;
    else
    // if this is the first IDless category -- initialize. this happens once.
    if ($virginity == true) {
        $store = $current;
        $virginity = false;                             
        }
// if initialized and current category string is the same as stored category string -- print it
if (($virginity == 0) && ($store = $current)) {
    echo $defaultID;
    }
// if initialized and current category string is different from the stored category string -- set new default category +1 and print it
if (($virginity == false) && ($store != $current)) {
    $defaultID = $defaultID++;
    echo $defaultID;
    $store = $current;
    }

Вы видите, куда я иду? Попытка присвоить каждой новой категории, которая появляется в результатах поиска, уникальный идентификатор в следующем сеансе цикла - проверьте, совпадает ли строка категории с предыдущей, если да, - используйте тот же идентификатор, иначе - увеличьте идентификатор на 1, напечатайте новый идентификатор и сохраните новую категорию.

Однако: это не работает должным образом.

Почему?

1 Ответ

0 голосов
/ 11 октября 2009

Ваш код немного сложен для чтения, но большой красный флажок, который я вижу, это блок:

//You have  a single equals sign here v
if (($virginity == 0) && ($store = $current)) 
{
    echo $defaultID;
}

Это означает, что до тех пор, пока $virginity==0, эта строка будет всегда выполняться, а $store всегда будет равняться $current.

Кстати, я собираюсь порекомендовать некоторые предложения по переформатированию и удобочитаемости. Возьми их или оставь, но это только мое мнение.

$ current = $ result-> section;

if ($ current! = Null) {// если один из результатов имеет квадратные скобки, поместите квадратные скобки в оба echo $ result-> sectionid; } иначе если ($ virginity == true) {// если это первая категория без идентификатора - инициализировать. это происходит один раз. $ store = $ current; $ virginity = false;
}

//you're setting $virginity=false or true, so doing !$virginity makes sense
// if it was actually a number, then comparing to 0 is better
// also, use parentheses only where really needed, otherwise it's just clutter
if (!$virginity && $store == $current) 
{
    echo $defaultID;
}

if (! $ Virginity && $ store! = $ Current) {// если инициализированная и текущая строка категории отличается от сохраненной строки категории - установите новую категорию по умолчанию +1 и распечатайте ее $ defaultID = $ defaultID ++; echo $ defaultID; $ store = $ current; }

...