@falcon_sapsan
DevOps

Почему не присваивается значение индекса в ассоциативном массиве PHP?

Есть код..
$db = new Database();
          $options=array();
          $data=array();
          $db->query('SELECT * FROM products LIMIT 0, 10');          
          $db->execute();
          $prod = $db->resultset();
          foreach ($prod as $d) {
            $db->query('SELECT product_lists_val.*, lists.ru AS VAL, lists_name.ru AS LNAME from product_lists_val inner join lists_name on lists_name.id = product_lists_val.list_id inner join lists on lists.id=product_lists_val.val WHERE product_lists_val.prod_id='.$d['id']);          
            $db->execute(); 
            $lists = $db->resultset();
            if (count($lists) != 0 ) {
              $options[$d['id']]=$lists;    //вот тут ошибка
            }


Мне нужно чтобы в вместо стандартных индексов в массиве $options[] (0,1,2,3... ) использовался ID товара.. для этого я делаю $options[$d['id']]=$lists;
но получаю следующий результат:
[0] => Array
        (
            [id] => 1
            [prod_id] => 8
            [list_id] => 1
            [val] => 60
            [VAL] => Красный
            [LNAME] => Общий список цветов
        )

    [1] => Array
        (
            [id] => 2
            [prod_id] => 8
            [list_id] => 2
            [val] => 85
            [VAL] => Алюминий
            [LNAME] => Материал
        )


А мне нужно, чтобы вместо [0] => Array ... [1] => Array было [ID_ТОВАРА1] => Array [ID_ТОВАРА2]
=> Array

Отдельно создавал пример - все работает как надо..
<?php
$names["Иванов"]="Иван";
$names["Сидоров"]="Николай";
$names["Петров"]="Петр";
var_dump($names);
?>


array(3) {
  ["Иванов"]=>
  string(8) "Иван"
  ["Сидоров"]=>
  string(14) "Николай"
  ["Петров"]=>
  string(8) "Петр"
}


Почему не присваивается индекс массива?

UPD
Пробовал вместе ID товара из базы вставлять произвольное значение
$i=100;
    foreach ($prod as $d) {
            $db->query('SELECT product_lists_val.*, lists.ru AS VAL, lists_name.ru AS LNAME from product_lists_val inner join lists_name on lists_name.id = product_lists_val.list_id inner join lists on lists.id=product_lists_val.val WHERE product_lists_val.prod_id='.$d['id']);          
            $db->execute(); 
            $lists = $db->resultset();
            if (count($lists) != 0 ) {
              $options[$i]=$lists;    //вот тут ошибка
            }
$i=$i+1;
}

все равно идет стандартная нумерация 0,1,2,3....
  • Вопрос задан
  • 222 просмотра
Пригласить эксперта
Ответы на вопрос 2
darkkemper
@darkkemper
Programmer / Software Developer
Я не знаю структуры вашей таблицы товаров, но подразумеваю, что не id, а prod_id из первого запроса:

if (count($lists) != 0 ) {
       $options[$d['prod_id']] = $lists; 
}

Или используйте prod_id из второго запроса:

if (count($lists) != 0 ) {
       $options[$lists['prod_id']] = $lists; 
}
Ответ написан
Так-то все правильно, значит, как всегда, дьявол в деталях.
Есть возможность вставить свой код? Напишите echo вначале для $d[id] - действительно ли там находится то, что ожидается; (хотя, впрочем, судя по $lists, должно быть ok) дальше проверяем это: $options[$d['id']]=$lists; выводим print_r($options[$d['id']])(ну или var_dump, кому что нравится); если в этом месте все нормально, значит, возможно, дальше в теле программы эти $options переписываются какой-то другой функцией. Одним словом, тестируем каждый шаг. Занудно, а что делать.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы