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

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Помогите разобраться с многомерным ассоциативным массивом

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


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

> Описание: Как получить значение определенной ячейки по ключу/ключам?
drdr
Отправлено: 26 Ноября, 2012 - 19:45:43
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Есть массив вида
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"

Как быть?
Спасибо

(Отредактировано автором: 26 Ноября, 2012 - 21:06:34)

 
 Top
caballero
Отправлено: 26 Ноября, 2012 - 19:50:41
Post Id


Активный участник


Покинул форум
Сообщений всего: 5998
Дата рег-ции: Сент. 2011  
Откуда: Харьков


Помог: 126 раз(а)




[] убери


-----
Бесплатная система складского учета с открытым кодом https://zippy[dot]com[dot]ua/zstore
 
 Top
EuGen Администратор
Отправлено: 26 Ноября, 2012 - 19:56:28
Post Id


Профессионал


Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007  
Откуда: Berlin


Помог: 707 раз(а)




caballero пишет:
[] убери

Тогда каждую итерацию массив запишется заново, что некорректно.


-----
Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
 
 Top
DeepVarvar Супермодератор
Отправлено: 26 Ноября, 2012 - 19:56:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008  
Откуда: Альфа Центавра


Помог: 353 раз(а)




 
 Top
drdr
Отправлено: 26 Ноября, 2012 - 21:06:06
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




caballero пишет:
[] убери

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

А это что?
 
 Top
sKaa
Отправлено: 26 Ноября, 2012 - 21:18:01
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


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. }

(Отредактировано автором: 26 Ноября, 2012 - 21:18:56)

 
 Top
drdr
Отправлено: 26 Ноября, 2012 - 21:21:18
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




sKaa, ну хорошо, а как обратиться к нужной мне ячейке?
Судя по твоему примеру, мне надо использовать числовой индекс 0..N?
Но у меня индекс 'sil_css' не числовой, он принимает значения типа 'sil-black-matte', 'sil-white-matte' и т.д.

(Отредактировано автором: 26 Ноября, 2012 - 21:23:57)

 
 Top
sKaa
Отправлено: 26 Ноября, 2012 - 21:27:10
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


drdr, судя по-вашему примеру $sils[] - принимал бы тоже числовые индексы...
Какой вопрос, такой ответ.

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

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

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


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Приведу кусочек массива $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.  
 
 Top
sKaa
Отправлено: 26 Ноября, 2012 - 21:43:41
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


Я вам уже дал нужный код.
 
 Top
drdr
Отправлено: 26 Ноября, 2012 - 21:50:10
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




sKaa, как мне узнать нужный числовой индекс?
Допустим, у меня переменная $sil1 из формы возвращает значение 'sil-grey-m' (ячейка [8]).
Как мне получить значение ячейки [7] => Array ( [sil_nr] => Серый матовый, т.е. именно 'Серый матовый'?

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

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

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

(Отредактировано автором: 26 Ноября, 2012 - 21:52:34)

 
 Top
sKaa
Отправлено: 26 Ноября, 2012 - 21:52:42
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 979
Дата рег-ции: Окт. 2011  
Откуда: Россия г. Нижний Новгород


Помог: 25 раз(а)

[+]


echo $sils[7]['sil_nr'];
 
 Top
DelphinPRO
Отправлено: 26 Ноября, 2012 - 21:53:00
Post Id



Активный участник


Покинул форум
Сообщений всего: 7187
Дата рег-ции: Февр. 2012  


Помог: 353 раз(а)




drdr пишет:
Как мне получить значение ячеки $sils['sil_nr'] по ключу 'sil_css'?

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

покажите какой массив вы хотите получить в результате fetch_array в переменной $sils.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
drdr
Отправлено: 26 Ноября, 2012 - 22:01:36
Post Id


Новичок


Покинул форум
Сообщений всего: 35
Дата рег-ции: Нояб. 2012  


Помог: 0 раз(а)




Переделал способ заполнения массива из БД на такой
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.  )


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

Приведу скрин куска таблицы БД, может, понятне будет
Прикреплено изображение (Нажмите для увеличения)
sils.png

(Отредактировано автором: 26 Ноября, 2012 - 22:07:13)

 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB