Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Помогите разобраться с многомерным ассоциативным массивом
Форумы портала PHP.SU » » Вопросы новичков » Помогите разобраться с многомерным ассоциативным массивом

Страниц (1): [1]
 

1. drdr - 26 Ноября, 2012 - 19:45:43 - перейти к сообщению
Есть массив вида
PHP:
скопировать код в буфер обмена
  1. $sils = array('sil_id' => '', 'sil_ne' => '', 'sil_nr' => '', 'sil_css' => '', 'sil_en' => '');


Я его заполняю из БД
PHP:
скопировать код в буфер обмена
  1.         $query_s = "SELECT * FROM silencers WHERE sil_enabled='checked' ORDER BY sil_id"; // Выбираем бамперы из БД, имеющиеся в наличии
  2.         $result_s = mysql_query($query_s);
  3.         while ($row_s = mysql_fetch_array($result_s))
  4.         {
  5.         $sils[]['sil_id'] = $row_s['sil_id'];
  6.         $sils[]['sil_ne'] = $row_s['sil_name_en'];
  7.         $sils[]['sil_nr'] = $row_s['sil_name_ru'];
  8.         $sils[]['sil_css'] = $row_s['sil_css_style'];
  9.         $sils[]['sil_en'] = $row_s['sil_enabled'];
  10.         }


Т.е. в результате получается многомерный массив.
Как мне получить значение ячеки $sils['sil_nr'] по ключу 'sil_css'?
У меня есть переменная $sil1, которая из формы получает нужное значение ключа.
Пытаюсь вывести что-то типа


ругается "Uninitialized string offset: 0 in index.php on line 711"

Как быть?
Спасибо
2. caballero - 26 Ноября, 2012 - 19:50:41 - перейти к сообщению
[] убери
3. EuGen - 26 Ноября, 2012 - 19:56:28 - перейти к сообщению
caballero пишет:
[] убери

Тогда каждую итерацию массив запишется заново, что некорректно.
4. DeepVarvar - 26 Ноября, 2012 - 19:56:57 - перейти к сообщению
5. drdr - 26 Ноября, 2012 - 21:06:06 - перейти к сообщению
caballero пишет:
[] убери

EuGen прав - мне нужно заполнить весь массив, что я и делаю.
А уже потом из него выбрать одно значение.
(Добавление)
DeepVarvar пишет:

А это что?
6. sKaa - 26 Ноября, 2012 - 21:18:01 - перейти к сообщению
PHP:
скопировать код в буфер обмена
  1. $query_s = "SELECT * FROM silencers WHERE sil_enabled='checked' ORDER BY sil_id"; // Выбираем бамперы из БД, имеющиеся в наличии
  2. $result_s = mysql_query($query_s);
  3.  
  4. if(mysql_num_rows($result_s)){
  5.  for($k=0;$k<mysql_num_rows($result_s);$k++){
  6.         $row_s = mysql_fetch_array($result_s);
  7.         $sils[$k]['sil_id'] = $row_s['sil_id'];
  8.         $sils[$k]['sil_ne'] = $row_s['sil_name_en'];
  9.         $sils[$k]['sil_nr'] = $row_s['sil_name_ru'];
  10.         $sils[$k]['sil_css'] = $row_s['sil_css_style'];
  11.         $sils[$k]['sil_en'] = $row_s['sil_enabled'];
  12.  }
  13. }
7. drdr - 26 Ноября, 2012 - 21:21:18 - перейти к сообщению
sKaa, ну хорошо, а как обратиться к нужной мне ячейке?
Судя по твоему примеру, мне надо использовать числовой индекс 0..N?
Но у меня индекс 'sil_css' не числовой, он принимает значения типа 'sil-black-matte', 'sil-white-matte' и т.д.
8. sKaa - 26 Ноября, 2012 - 21:27:10 - перейти к сообщению
drdr, судя по-вашему примеру $sils[] - принимал бы тоже числовые индексы...
Какой вопрос, такой ответ.

count($sils) - будет равняться числу итераций цикла. от 0 и до ... .

$sils[n] - будет содержать массив состоящий из :
sil_id, sil_ne, sil_nr, sil_css, sil_en...

Собственно, а как Вы к ним хотели обращаться в Вашем примере?
(Добавление)
$sils[N]['sil_id'] - как-то так, вместо N число...
9. drdr - 26 Ноября, 2012 - 21:40:30 - перейти к сообщению
Приведу кусочек массива $sils, полученный с помощью print_r($sils) (на самом деле там более 30 подмассивов)

PHP:
скопировать код в буфер обмена
  1.  
  2. [sil_id] => [sil_ne] => [sil_nr] => [sil_css] => [sil_en] =>
  3.  
  4. [0] => Array ( [sil_id] => 01 )
  5. [1] => Array ( [sil_ne] => Black Matte )
  6. [2] => Array ( [sil_nr] => Черный матовый )
  7. [3] => Array ( [sil_css] => sil-black-m )
  8. [4] => Array ( [sil_en] => checked )
  9.  
  10. [5] => Array ( [sil_id] => 02 )
  11. [6] => Array ( [sil_ne] => Grey Matte )
  12. [7] => Array ( [sil_nr] => Серый матовый )
  13. [8] => Array ( [sil_css] => sil-grey-m )
  14. [9] => Array ( [sil_en] => checked )
  15.  
  16. ...
  17.  
  18. [155] => Array ( [sil_id] => 32 )
  19. [156] => Array ( [sil_ne] => Bundes Flagge Glossy )
  20. [157] => Array ( [sil_nr] => Бундесфлаг глянцевый )
  21. [158] => Array ( [sil_css] => sil-bundesflagge-g )
  22. [159] => Array ( [sil_en] => checked )
  23.  )
  24.  
10. sKaa - 26 Ноября, 2012 - 21:43:41 - перейти к сообщению
Я вам уже дал нужный код.
11. drdr - 26 Ноября, 2012 - 21:50:10 - перейти к сообщению
sKaa, как мне узнать нужный числовой индекс?
Допустим, у меня переменная $sil1 из формы возвращает значение 'sil-grey-m' (ячейка [8]).
Как мне получить значение ячейки [7] => Array ( [sil_nr] => Серый матовый, т.е. именно 'Серый матовый'?

(Блин, или переделать способ заполнения массива или вообще отказаться от нечислового индекса)

ЗЫ Забыл сказать, что в PHP я новичок, изучаю по форумам да мануалам

С БД понятно, там проще сделать нужный запрос, но не хотелось бы делать лишних запросов, хотя нагрузка на БД предполагается незначительная.
12. sKaa - 26 Ноября, 2012 - 21:52:42 - перейти к сообщению
echo $sils[7]['sil_nr'];
13. DelphinPRO - 26 Ноября, 2012 - 21:53:00 - перейти к сообщению
drdr пишет:
Как мне получить значение ячеки $sils['sil_nr'] по ключу 'sil_css'?

это завело меня в тупик

покажите какой массив вы хотите получить в результате fetch_array в переменной $sils.
14. drdr - 26 Ноября, 2012 - 22:01:36 - перейти к сообщению
Переделал способ заполнения массива из БД на такой
PHP:
скопировать код в буфер обмена
  1.         $sils['sil_id'][] = $row_s['sil_id'];
  2.         $sils['sil_ne'][] = $row_s['sil_name_en'];
  3.         $sils['sil_nr'][] = $row_s['sil_name_ru'];
  4.         $sils['sil_css'][] = $row_s['sil_css_style'];
  5.         $sils['sil_en'][] = $row_s['sil_enabled'];


Получаю следующее
PHP:
скопировать код в буфер обмена
  1. [sil_id] => Array ( [0] => 01 [1] => 02 [2] => 03 [3] => 04 [4] => 05 [5])
  2. [sil_ne] => Array ( [0] => Black Matte [1] => Grey Matte [2] => White Matte [3] => Clear Matte [4] => Red Matte [5] => Blue Matte )
  3. [sil_nr] => Array ( [0] => Черный матовый [1] => Серый матовый [2] => Белый матовый [3] => Прозрачный матовый [4] => Красный матовый [5] )
  4. ...
  5. [sil_en] => Array ( [0] => checked [1] => checked [2] => checked [3] => checked [4] => checked [5] )
  6.  )


Так наверное даже лучше

Приведу скрин куска таблицы БД, может, понятне будет

 

Powered by ExBB FM 1.0 RC1