Как сравнить ассоциативный массив с result_array в PHP - PullRequest
0 голосов
/ 27 сентября 2018

Необходимо связать раскрывающийся список Page условно на основе таблицы «Содержимое».Заголовки страниц хранятся в ассоциативном массиве, а в таблице «Содержимое» хранится код страницы.Вот код

Функция, которая возвращает заголовки страниц

    public function getPageTitles(){    
     $pageTitles = array("Home"=> "Home", 
              "AboutUs"=> "About Us", //AboutUs will save in database as pageCode
              "Features"=> "Features",
              "ContactUs"=> "Contact Us");

     return $pageTitles;
  }

Функция, которая проверяет, есть ли у страницы содержание или нет:

public function getPageTitlesWithNoContent()
{
    $pageTitles = $this->getPageTitles();

    $this->db->distinct('pageCode');
        $this->db->select('pageCode');
        $this->db->from('content');
    $this->db->where('status', 1);      
    $data = $this->db->get();

    $queryResult = $data ? $data->result_array() : 0 ;

    $emptyPageTitle = array();

    foreach($pageTitles as $x => $x_value)
    {
        $hasContent = in_array($x, $queryResult);

        if (!$hasContent){ 
         $emptyPageTitle[$x] = $x_value;
        }
    }

    return $emptyPageTitle;
}

Эта функция возвращает все заголовки страниц .. новичок в php, не знаю, что не так

Ответы [ 3 ]

0 голосов
/ 27 сентября 2018

Руководствуясь @TamilvananN, я распечатал queryResult и попробовал этот обходной путь:

    foreach($pageTitles as $x => $x_value)
        {
            foreach ($queryResult as $item) 
            {
                if (!($x == $item['pageCode'])){ 
                 $emptyPageTitle[$x] = $x_value;
                }
            }
        }

Он работает, но, как вы можете видеть, он имеет цикл в цикле ... который может быть очень дорогим ..Подскажите, пожалуйста, какой-нибудь быстрый способ сравнить результаты.

0 голосов
/ 28 сентября 2018

@ NMathur Я думаю, ты почти понял.Внесены некоторые изменения в этот код, проверьте его.

public function getPageTitlesWithNoContent() {

    $pageTitles = $this->getPageTitles();

    $this->db->select('pageCode');
    $this->db->from('content');
    $this->db->where('status', 1); 
    $this->db->group_by('pageCode');      
    $query = $this->db->get();

    $queryResult = array();

    foreach ($query->result_array() as $row) { // This loop should need to form an array based on query result
       $queryResult[$row['pageCode']] = $row['pageCode'];
    }

    $emptyPageTitle = array_diff_key($pageTitles,$queryResult); // Compares the keys from array1 against the keys from array2 and returns the difference

    return $emptyPageTitle;

}
0 голосов
/ 27 сентября 2018

Проверить имя поля в таблице одинаково?С первым символом Uppercase?

Также измените свой код в этом цикле:

foreach($pageTitles as $x => $x_value)
{
    if (in_array($x, $queryResult)){ 
     $emptyPageTitle[$x] = $x_value;
    }
}

Я удаляю!отрицательный в состоянии проверки

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