2014-09-19 5 views
0

Я вызываю информацию из нескольких таблиц, чтобы получить результаты как переменные в шаблоне. Функция шаблона не так уж и относительна, но получение массивов и правильных подсчетов - проблема, с которой я, похоже, борюсь. Если кто-то может проверить код, я, конечно, чего-то не вижу.Объединение нескольких массивов

Таблицы таблиц $ brandFieldArray содержат данные полей tableB. Например, если tableB имеет поле под названием images, поле в таблице B будет содержать путь для изображения, но tableFields будет содержать имя «изображение» в поле, а также тип поля, длины, ширины, качества, видимости и т. Д. изображения.

Я мог бы легко создавать поля без массива, но система может создавать поля, которые необходимо добавить в массив без необходимости редактировать код каждый раз.

Поэтому мне нужно вызвать поля из табличных полей и содержимого из таблицыB. Результат $ result from tableItems - убедиться, что я получаю правильный контент из tableB для правильного элемента, хранящегося в tableItems.

Помогите мне исправить этот код?

<?php 
    switch ($requiredVar) { 
     case "brand": 
      $brandFieldsArray = $dbA->query("select * from tableFields where type='X' and visible=1"); 
      $result = $dbA->query("select bID from tableItems where iID = $x"); 
      if ($dbA->count($result) != null) { 
       $thisrecord = $dbA->fetch($result); 
       $bID = $thisrecord["bID"]; 
      } 
      else { 
       $bID = null; 
      } 
      $theBrandsArray = $dbA->query("select * from tableB where bID=$bID"); 
      $bcCount = count($theBrandsArray); 
      $brandContentArray = null; 
      foreach ((array) $theBrandsArray as $brandContent) { 
        $allBrandFields = "";  
        if (is_array($brandFieldsArray)) { 
         $cc = count($brandFieldsArray); 
         foreach ($brandFieldsArray as $brField) { 
         $thisBrandField = $brField; 
         switch ($thisBrandField["fieldtype"]) { 
           case "TEXT": 
           case "TEXTAREA": 
           case "IMAGE": 
           if ($thisBrandField["fieldtype"] == "IMAGE") { 
            if ($brandContent["brandfield".$brField["fieldname"]] == "") { 
             $thisBrandField["content"] = $brfield["defaultimage"]; 
            } 
            else { 
             $thisBrandField["content"] = $brandContent["brandfield".$brField["fieldname"]]; 
            } 
            $thisField = generateImageVariables($brField["x"],$brField["y"]); 
            $thisBrandField["style"] = $thisField["style"]; 
            $thisBrandField["stylefull"] = $thisField["stylefull"]; 
           } 
           else { 
            $brandContent["brandfield".$brField["fieldname"]] = findCorrectLanguage($brandContent,"brandfield".$brField["fieldname"]); 
            if (retrieveOption("convertToBR") == 1 && retrieveOption("WYSIWYGEnabled") == 0) { 
             $thisBrandField["content"] = str_replace("\r\n","<br/>",$brandContent["brandfield".$brField["fieldname"]]); 
            } 
            else { 
              $thisBrandField["content"] = $brandContent["brandfield".$brField["fieldname"]]; 
            } 
           } 
           break; 
          } 
          $brandContent[$brField["fieldname"]] = @$thisBrandField; 
         } 
         if (is_array($allBrandFields)) { 
          $brandContent["brandfields"] = $allBrandFields; 
         } 
         else { 
          $brandContent["brandfields"] = null; 
         } 
        } 
        $brandContentArray[] = $brandContent; 
      } 
      return (count($brandContentArray) == 1 ? $brandContentArray[0] : $brandContentArray); 
    } 
    $tpl->addVariable("brand",$brandContentArray); 
    break; 
?> 
+0

Пожалуйста, объясните '$ dbA-> retrieveAllRecordsFromQuery()'. Я не знаком с этим звонком. Я сам использую mysqli. Он использует '$ query_result = $ db-> query()' и 'if ($ query_result-> num_rows> 0)'. – PHPglue

+0

@PHPglue Честно говоря, я не могу объяснить это, поскольку я вытащил это из системы, где он делал аналогичный запрос, и просто использовал его повторно. Что бы это ни потребовалось, чтобы сделать эту работу прекрасной со мной. Запросы mysqli в порядке. – user3814045

+0

Вы начинаете с добавления функции 'db() {return new mysqli ('host', 'username', 'password', 'database_name');}' на отдельной защищенной странице '.php'. Мы назовем его 'connect.php'. Затем вы включаете «folder/connect.php»; 'на страницу, с которой будете работать. Тогда это похоже на '$ db = db(); $ sel = $ db-> query ('SELECT * FROM table_name WHERE column_name = value'); if ($ sel-> num_rows> 0) {while ($ row = $ sel-> fetch_object()) {echo "

{$row->column_name}
{$row->another_column}
";}} else {echo 'No Rows';} '. – PHPglue

ответ

0

Я никогда не видел эту конструкцию с двоеточием в обратном направлении. Может быть, вы можете объяснить. Или, возможно, он исправляет эту проблему.

  return $brandContentArray[0] : $brandContentArray; 

Удалить эту линию. Вы не должны возвращаться изнутри корпуса до перерыва. У вас есть следующая командная строка.

 // commented out: return $brandContentArray[0] : $brandContentArray; 
} 
$tpl->addVariable("brand",$brandContentArray); 
break; 

В вашем описании отсутствует важная информация: Какие данные должны быть возвращены в массиве?

+0

Данные из таблицы tableFields и tableB должны быть возвращены в массиве. Данные должны вызываться на основе имени поля. Вышеупомянутое не фиксировало его на своем, но может быть частью решения. – user3814045

+0

Какой именно формат должен иметь возвращенный массив? –

+0

возвращает пример вызова в template- <#if: brand.fieldname.type: экв: Текст #> {brand.fieldname.content} или в цикле, как это \t \t \t \t \t <#loop: brand.extrafields #> <#if: brand.brandfields.content: neq: blank #> ​​ <#if: brand.brandfields.type: eq: TEXT #> {brand.brandfields.содержание} user3814045

0

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

Благодарим всех вас за помощь.

Смежные вопросы