Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Здесь нужно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 30.04.2011, 11:46   #1
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию Как добавлять новые элементы (ключ=>значение) в ассоциативный массив программно.

Добрый день!

Задача:
1. создать ассоциативный массив (это понятно)
2. в новый ассоциативный массив передать первый элемент типа ключ=>значение (это тоже понятно)
3. далее программно необходимо пополнять ассоциативный массив новыми элементами (ключ=>значение); простое присваивание типа $array = array(ключ=>значение) или $array['key'] = value не подходит. функции типа array_push и так далее не подходят, так как нужно пополнять массив новыми элементами ключ=>значение, а не просто заносить значение (value).

почему не работает такая конструкция:

PHP код:
$array = (!isset($array) ? array($key => $value) : $array+= array($key => $value)); 
в результате ее работы исполняется только первая часть - $array = array($key => $value), а дальнейшее пополнение массива ($array+= array($key => $value))) не происходит.

Не работает и такая конструкция:

PHP код:
<?php 
// просто пример

$ar_1 = array('a',' b','c');
$ar_2 = array('d',' e','i');
$ar_3 = array('w',' m','n');

$num rand(0,2);

switch (
$num) :
  case 
: { $key 'пример №1'$value $ar_1; }
  break;
  case 
: { $key 'пример №2'$value $ar_2; }
  break;
  case 
: { $key 'пример №3'$value $ar_3; }
  break;
endswitch;

$array[] = array($key => $value);
?>
В результате получаем в массиве только один элемент (ключ-значение), а пополнения в дальнейшем нет. только перезаписывание первого элемента новым.

Буду благодарен за любые идеи.

Спасибо.

Последний раз редактировалось SkAndrew; 30.04.2011 в 12:00. Причина: дополнение
SkAndrew вне форума   Ответить с цитированием
Старый 30.04.2011, 12:46   #2
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Вообще-то всегда добавлять можно было так: $arr[]=...;
Потом можно удалить дубликаты, если нужно
motorway вне форума   Ответить с цитированием
Старый 30.04.2011, 12:48   #3
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

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

спасибо.
SkAndrew вне форума   Ответить с цитированием
Старый 30.04.2011, 12:56   #4
russian-stalker
Участник клуба
 
Аватар для russian-stalker
 
Регистрация: 23.08.2008
Сообщений: 1,616
По умолчанию

array_merge, не?
Там же, в комментариях, есть и решение вашей проблемы с плюсованием.
pushl $0x18E3DF6B
call ICQ

Последний раз редактировалось russian-stalker; 30.04.2011 в 12:59.
russian-stalker вне форума   Ответить с цитированием
Старый 30.04.2011, 12:57   #5
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

Да, у вас же здесь так... А просто так не подходит:
Код:
$arr=array();
$arr['a1']="1";
$arr['b2']="2";
$arr['a11']="3";
foreach ($arr as $ar)
echo $ar."<BR>";
Или я что-то не понял? Ключ есть, значение есть, вот мы и присваиваем новому элементу его.
motorway вне форума   Ответить с цитированием
Старый 30.04.2011, 13:12   #6
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

array_merge - не подходит.

задача еще раз:

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

спасибо
SkAndrew вне форума   Ответить с цитированием
Старый 30.04.2011, 13:14   #7
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

А я все-таки не понял, чем мой вариант не подходит и что конкретно означает динамически? Если ключ и значение известны, то берем и делаем $arr[$key]=$value;
motorway вне форума   Ответить с цитированием
Старый 30.04.2011, 13:18   #8
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

по ходу выполнения программы создаюся пары (ключ-значение) мне необходимо их вносить последовательно в некий массив (в конец или начало без разницы). например,
массив = (ключ1-значение1, ключ2-значение2 и так далее), то есть все время пополняя массив новыми элементами.

в вашем варианте $arr[$key]=$value; получим (ключ1-значение1), например
при повторном добавлении новой пары получим (ключ2-значение2)!
а надо массив = (ключ1-значение1, ключ2-значение2) и так далее.

теперь понятно объяснил?

спасибо

Последний раз редактировалось SkAndrew; 30.04.2011 в 13:20.
SkAndrew вне форума   Ответить с цитированием
Старый 30.04.2011, 13:19   #9
motorway
Участник клуба
 
Регистрация: 28.06.2009
Сообщений: 1,950
По умолчанию

А в моем примере этого не происходит?
motorway вне форума   Ответить с цитированием
Старый 30.04.2011, 13:24   #10
SkAndrew
Форумчанин
 
Регистрация: 05.04.2008
Сообщений: 244
По умолчанию

нет к сожалению не происходит.

вот можете попробовать, например так:

PHP код:
<?php
$ar_1 
= array('a',' b','c');
$ar_2 = array('d',' e','i');
$ar_3 = array('w',' m','n');

$num rand(0,2);
echo 
'num = '.$num.'<br />';
switch (
$num) :
  case 
: { $key 'augusto'$value $ar_1; }
  break;
  case 
: { $key 'sikorsky'$value $ar_2; }
  break;
  case 
: { $key 'mobile'$value $ar_3; }
  break;
endswitch;

if(!isset(
$array)) {
   
$array = array($key => $value);
}
else {
   
$array[] = array($key => $value);
}

var_dump($array);
?>
и убедиться сами
происходит просто перезапись первого элемента.
вроде есть какое-то решение через foreach, но я не могу понять как применить этот цикл здесь, когда мне нужно добавить пару в уже имеющийся ассоциативный массив.

спасибо
SkAndrew вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ассоциативный массив iMax` Общие вопросы C/C++ 2 03.02.2011 10:37
SOAP и ассоциативный массив Zigmuntfreyd Работа с сетью в Delphi 1 12.07.2010 16:55
Ассоциативный массив phpcreator Помощь студентам 0 14.05.2010 20:18
Ассоциативный массив. Map phpcreator Помощь студентам 0 08.05.2010 11:57
Получить массив B, присвоив его k-му элементу значение 0, если все элементы [Pascal] М@лышка Помощь студентам 10 12.10.2009 23:29


16:42.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.