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]   

> Без описания
keilman
Отправлено: 16 Июня, 2014 - 16:06:13
Post Id


Новичок


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


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




Здравствуйте!

Прошу помощи с jQuery.
Требуется заполнить новый массив.

Вот код:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. // Создаем новый массив
  3. var massiv = new Array;
  4.  
  5. // Ищем ячейки таблицы с атрибутом "title"
  6. $("td[title]").each(function(i)
  7. {
  8.         massiv[i] = $(this).html();             // "Получаем содержимое ячейки"
  9.         massiv[i] = $(this).attr("title");      // "Получаем содержимое атрибута "title"
  10. });
  11.  


Я получаю значения в переменную "massiv" и посылаю аяксом на сервер, обрабатываю полученные данные функцией foreach.

Сейчас на сервер массив приходит такого вида:

PHP:
скопировать код в буфер обмена
  1.  
  2. {
  3.         [0]=>
  4.         string(314) "Значение 1"
  5.         [1]=>
  6.         string(311) "Значение 2"
  7.         [2]=>
  8.         string(314) "Значение 3"
  9. }
  10.  


А нужно чтобы был такого вида:

PHP:
скопировать код в буфер обмена
  1.  
  2. {
  3.         [0]=>
  4.         array(2)
  5.         {
  6.         ["id"]=>
  7.         string(1) "ключ1"
  8.         ["name"]=>
  9.         string(14) "значение1"
  10.     }
  11.     [1]=>
  12.     array(2)
  13.     {
  14.         ["id"]=>
  15.         string(1) "ключ2"
  16.         ["name"]=>
  17.         string(12) "значение2"
  18.     }
  19. }
  20.  


т. е. нужно получить ассоциативный массив с парой ключ1 => значение1, ключ2 => значение2

У меня пока в работает только эта строка
CODE (javascript):
скопировать код в буфер обмена
  1. massiv[i] = $(this).attr("title");

Я так понимаю эта
CODE (javascript):
скопировать код в буфер обмена
  1. massiv[i] = $(this).html();
не работает потому что происходит перезапись массива.

Как сделать чтобы в массив записывались и содержимое атрибута "title" и содержимое ячейки "TD"?

Пробовал так:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. massiv[i][] = $(this).html();   // "Получаем содержимое ячейки"
  3. massiv[i][] = $(this).attr("title");    // "Получаем содержимое атрибута "title"
  4.  
 
 Top
DelphinPRO
Отправлено: 16 Июня, 2014 - 16:38:05
Post Id



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


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


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




CODE (javascript):
скопировать код в буфер обмена
  1. var k = $(this)... // то что должно быть ключом
  2. massiv[k] = $(this).attr("title");


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
keilman
Отправлено: 16 Июня, 2014 - 17:14:20
Post Id


Новичок


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


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




DelphinPRO пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. var k = $(this)... // то что должно быть ключом
  2. massiv[k] = $(this).attr("title");


Спасибо за ответ!

Но к сожалению не помогло, вид массива остался таким же почему то...

я решил проблему немного по другому:

CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready(function()
  2. {
  3.         // Выводим список партий
  4.         $("#button").click(function()
  5.         {
  6.                 // Создаем массив для номеров set-ов
  7.                 var num_set = [];
  8.                 // Создаем массив для напараметров
  9.                 var settings = [];
  10.  
  11.                 // Ищем ячейки таблицы с атрибутом "title"
  12.                 $("td[title]").each(function(i)
  13.                 {
  14.                         // Записываем из ячеек номера set-ов
  15.                         num_set[i]=$(this).html();
  16.                         // Записывем параметры set-ов
  17.                         settings[i]=$(this).attr("title");
  18.                 });
  19.  
  20.                 // Отправляем на сервер данные
  21.                 $.ajax(
  22.                 {
  23.                         async: false,
  24.                         type: "POST",
  25.                         url: "ajax/handler.php",
  26.                         data:
  27.                         {
  28.                                 num_set:num_set,
  29.                                 settings:settings
  30.                         },
  31.                         success: function(html)
  32.                         {
  33.                                 $("#result").html(html);
  34.                         }
  35.                 });
  36.         });
  37. });


И обработчик на сервере принимающий массив:

PHP:
скопировать код в буфер обмена
  1. foreach ($_POST['settings'] as $key1 => $settings)
  2. {
  3.         foreach ($_POST['num_set'] as $key2 => $num_set)
  4.         {
  5.                 if ($key1 == $key2)
  6.                 {
  7.                         echo 'SET: '.$num_set.'<br />';
  8.                         echo 'Параметры: '.$settings.'<br /><br />';
  9.                 }
  10.         }
  11. }


в скрипте jquery ничего критичного, а вот в обработчике php второй перебор не совсем удачно сделан... Он работает, но приходится много проходов делать, это из-за того что приходиться два массива по ключам сравнивать.

Может есть способ лучше это реализовать?

(Отредактировано автором: 16 Июня, 2014 - 17:16:31)

 
 Top
tuareg
Отправлено: 16 Июня, 2014 - 19:51:47
Post Id


Участник


Покинул форум
Сообщений всего: 1234
Дата рег-ции: Июнь 2010  


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




А так ?:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. // Создаем массив для номеров set-ов
  3.                 var arr  = [],obj = {},el;
  4.  
  5.  
  6.                 // Ищем ячейки таблицы с атрибутом "title"
  7.                 $("td[title]").each(function(i)
  8.                 {
  9.                        el = $(this);
  10.                        obj = {
  11.                            num_set : el.html(),
  12.                            settings  : el.attr('title')    
  13.                        }
  14.                        arr.push(obj);
  15.                 });
  16. $.ajax(
  17.                 {
  18.                         async: false,
  19.                         type: "POST",
  20.                         url: "ajax/handler.php",
  21.                         data:arr,
  22.                         success: function(html)
  23.                         {
  24.                                 $("#result").html(html);
  25.                         }
  26.                 });
  27.  
 
 Top
armancho7777777 Супермодератор
Отправлено: 16 Июня, 2014 - 20:42:23
Post Id



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


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


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




CODE (javascript):
скопировать код в буфер обмена
  1. var $data = $("td[title]").map(function(){
  2.  
  3.     return {
  4.         id   : this.getAttribute('title'),
  5.         name : this.innerHTML
  6.     };
  7. });
  8.  
  9. $.post('ajax/handler.php', $data.get(), function(html){
  10.     $("#result").html(html);
  11. });
 
 Top
keilman
Отправлено: 16 Июня, 2014 - 22:59:02
Post Id


Новичок


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


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




tuareg пишет:
А так ?:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. // Создаем массив для номеров set-ов
  3.                 var arr  = [],obj = {},el;
  4.  
  5.  
  6.                 // Ищем ячейки таблицы с атрибутом "title"
  7.                 $("td[title]").each(function(i)
  8.                 {
  9.                        el = $(this);
  10.                        obj = {
  11.                            num_set : el.html(),
  12.                            settings  : el.attr('title')    
  13.                        }
  14.                        arr.push(obj);
  15.                 });
  16. $.ajax(
  17.                 {
  18.                         async: false,
  19.                         type: "POST",
  20.                         url: "ajax/handler.php",
  21.                         data:arr,
  22.                         success: function(html)
  23.                         {
  24.                                 $("#result").html(html);
  25.                         }
  26.                 });
  27.  


Спасибо! Но ваш вариант возвращает NULL.

Я решил другим способом, ниже смотрите.
(Добавление)
armancho7777777 пишет:
CODE (javascript):
скопировать код в буфер обмена
  1. var $data = $("td[title]").map(function(){
  2.  
  3.     return {
  4.         id   : this.getAttribute('title'),
  5.         name : this.innerHTML
  6.     };
  7. });
  8.  
  9. $.post('ajax/handler.php', $data.get(), function(html){
  10.     $("#result").html(html);
  11. });


И Вам спасибо за наводку. Ваш вариант вообще почему то не возвращал результат...
Но зато натолкнуло на мысли, спасибо.

Я решил по другому, идея взята от Вас!
(Добавление)
Я решил вот так:

код скрипта:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $(document).ready(function()
  3. {
  4.         // Выводим список партий
  5.         $("#button").click(function()
  6.         {
  7.                 // Создаем массив для напараметров
  8.                 var $massiv = [];
  9.  
  10.                 // Ищем ячейки таблицы с атрибутом "title"
  11.                 $("td[title]").each(function(i)
  12.                 {
  13.                         $massiv[i] =
  14.                         {
  15.                                 // Записываем из ячеек номера set-ов
  16.                                 num_set:$(this).html(),
  17.                                 // Записывем параметры set-ов
  18.                                 settings:$(this).attr("title")
  19.                         };
  20.                 });
  21.  
  22.                 // Отправляем на сервер данные
  23.                 $.ajax(
  24.                 {
  25.                         async: false,
  26.                         type: "POST",
  27.                         url: "ajax/handler.php",
  28.                         data:
  29.                         {
  30.                                 check:"yes",
  31.                                 massiv:$massiv
  32.                         },
  33.                         success: function(html)
  34.                         {
  35.                                 $("#result").html(html);
  36.                         }
  37.                 });
  38.         });
  39. });
  40.  


и обработчик на сервере (php):

PHP:
скопировать код в буфер обмена
  1.  
  2. if (isset($_POST['check']) && $_POST['check'] == "yes")
  3. {
  4.         foreach ($_POST['massiv'] as $key => $massiv)
  5.         {
  6.                 echo 'SET: '.$massiv['num_set'].'<br />';
  7.                 echo 'Параметры: '.$massiv['settings'].'<br /><br />';
  8.         }
  9. }
  10.  


Теперь используется всего лишь один foreach Улыбка
А то приходиться парсить файл содержащий до 15000 строк.
 
 Top
armancho7777777 Супермодератор
Отправлено: 17 Июня, 2014 - 01:35:50
Post Id



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


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


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




keilman пишет:
Ваш вариант вообще почему то не возвращал результат...

Исправить

на
CODE (javascript):
скопировать код в буфер обмена
  1. {massiv : $data.get()}
 
 Top
keilman
Отправлено: 17 Июня, 2014 - 10:20:00
Post Id


Новичок


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


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




armancho7777777 пишет:
keilman пишет:
Ваш вариант вообще почему то не возвращал результат...

Исправить

на
CODE (javascript):
скопировать код в буфер обмена
  1. {massiv : $data.get()}


О, спасибо.

Блин, почему у меня нельзя нажимать кнопку "Спасибо", уже трем человекам Улыбка хотел нажать, а ругается что мало сообщений...
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« JavaScript & VBScript »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB