[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Как добавлять новые элементы в массив программно?
skolozhabskiy
Добрый день!

Задача:
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 0 : { $key = 'пример №1'; $value = $ar_1; }
break;
case 1 : { $key = 'пример №2'; $value = $ar_2; }
break;
case 2 : { $key = 'пример №3'; $value = $ar_3; }
break;
endswitch;

$array[] = array($key => $value);
?>

В результате получаем в массиве только один элемент (ключ-значение), а пополнения в дальнейшем нет. только перезаписывание первого элемента новым.

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

Спасибо.



Спустя 6 минут, 22 секунды (30.04.2011 - 12:02) Nikitian написал(а):
Так надо

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

Спустя 4 минуты, 46 секунд (30.04.2011 - 12:07) skolozhabskiy написал(а):
пробовал - не получается, перезаписывается первый элемент, вот код:


<?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 0 : { $key = 'augusto'; $value = $ar_1; }
break;
case 1 : { $key = 'sikorsky'; $value = $ar_2; }
break;
case 2 : { $key = 'mobile'; $value = $ar_3; }
break;
endswitch;

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

var_dump($array);
?>


код полностью рабочий, но только с тем что идет перезапись первого элемента и все.
где здесь ошибки?

Спустя 1 минута, 26 секунд (30.04.2011 - 12:09) Nikitian написал(а):
В этом коде только один элемент и создаётся. Ни цикла, ни повторов нет.

Спустя 1 минута, 47 секунд (30.04.2011 - 12:10) skolozhabskiy написал(а):
вы може подсказать как правильно исправить этот код?
как организовать цикл, когда я не знаю количества записываемых элементов изначально?
или как-то foreach обыгрывается, но как тогда в данной конструкции применить foreach?

спасибо

Спустя 11 минут, 3 секунды (30.04.2011 - 12:21) Nikitian написал(а):
У вас вообще не понятно от чего должно зависеть количество итераций цикла.

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

спасибо

Спустя 3 минуты, 17 секунд (30.04.2011 - 12:26) Nikitian написал(а):
Там, где надо добавлять ключ-значение вставляете код:

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

Спустя 3 минуты, 48 секунд (30.04.2011 - 12:30) skolozhabskiy написал(а):
я новичок пока еще в программировании на php
вы можете реально в приведенном мною выше примере с вашим кодом показать как это может работать.
в этом примере я смоделировал ситуацию.

спасибо

Спустя 2 минуты, 49 секунд (30.04.2011 - 12:32) Nikitian написал(а):
Как-то так?

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

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

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

var_dump($array);
?>


Спустя 32 секунды (30.04.2011 - 12:33) Лена написал(а):
Код не работает у вас, потому как вы с самого начала пытаетесь к числовому массиву прилепить значения для ассоциативного.
$ar_1 = array('a',' b','c'); - это числовой массив.

$ar_1 = array('asdf'=>'a','asdfs'=>'b','sdfsdf'=>'c');
//добавить новый элемент
$ar_1['qwet'] = 'qwzxc';
//необходимо массив пополнить новыми элементами
//ВСЕ НОВЫЕ ЭЛЕМЕНТЫ НАДО СОБРАТЬ В МАССИВ

$arr_new = array('w'=>'qwe','zxc'=>'xcvxcv');
foreach($arr_new as $key=>$val){
$ar_1[$key]=$val;

}
print_r($ar_1);


Толковее расскажите, что вам нужно сделать на самом деле.

Спустя 1 минута, 51 секунда (30.04.2011 - 12:35) neadekvat написал(а):
skolozhabskiy, покажи исходный массив и тот, который должен получится.

Спустя 5 минут, 12 секунд (30.04.2011 - 12:40) skolozhabskiy написал(а):
исходного массива нет, он получается по ходу выполнения программы в нескольких файлах php. там все отлично и они получаются, а теперь мне необходимо их последовательно сохранить в некий массив. вот такая вот задача.

например,

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

массив = (ключ1-значение1, ключ2-значение2)

и так далее, новая пара ключ-значение - в массив

массив = (ключ1-значение1, ключ2-значение2, .. , ключN-значениеN)

извините, но вы снова неверно меня поняли, речь не о присвоении. это просто модель, речь о возможности пополнения некого массива элементами ключ-значение.

то есть:

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

подобное присвоение $ar_1['qwet'] = 'qwzxc'; в моем случае невозмодно.

спасибо.

Спустя 3 минуты, 28 секунд (30.04.2011 - 12:43) neadekvat написал(а):
skolozhabskiy, дак не нужен настоящий. Покажите структуру исходного и результирующего массивов.

Спустя 1 минута, 54 секунды (30.04.2011 - 12:45) skolozhabskiy написал(а):
показал и объяснил выше. отредактировал предыдущий свой пост

не может быть, чтобы не было решения, мастера php помогите, ведь задача то интересная, даже не на форуме начинающих.

спасибо за любую помощь.

Спустя 1 минута, 46 секунд (30.04.2011 - 12:47) neadekvat написал(а):
Цитата (skolozhabskiy @ 30.04.2011 - 13:45)
показал и объяснил выше.

Объяснил - вижу, да. А структуры не вижу. И из объяснений непонятно, что нужно.

Спустя 1 минута, 1 секунда (30.04.2011 - 12:48) neadekvat написал(а):
Цитата (skolozhabskiy @ 30.04.2011 - 13:40)
подобное присвоение $ar_1['qwet'] = 'qwzxc'; в моем случае невозмодно.

Ок, почему невозможно?

Спустя 4 минуты, 54 секунды (30.04.2011 - 12:53) Лена написал(а):
Цитата (skolozhabskiy @ 30.04.2011 - 09:40)
исходного массива нет, он получается по ходу выполнения программы в нескольких файлах php. там все отлично и они получаются, а теперь мне необходимо их последовательно сохранить в некий массив. вот такая вот задача.


Покажите, что у вас получается по ходу выполнения программы. Если информация секретная, замените чем-нибудь другим.

Спустя 1 минута, 36 секунд (30.04.2011 - 12:55) neadekvat написал(а):
Лена, насколкьо я понял, из
array (key1 => value1, key2 => value2)
ТС надо получить
array (key1 => value1, key2 => value2, key3 => value3)
При этом ни одно стандартное средство, как обычно, не подходит.

Спустя 3 минуты, 41 секунда (30.04.2011 - 12:58) Лена написал(а):
Виталик, я тоже так поняла.
В смысле, не подходит?
Ему надо взять значения и долепить к массиву, он должен знать, что ему долепить и к чему лепить - и все.

Спустя 1 минута, 55 секунд (30.04.2011 - 13:00) neadekvat написал(а):
Цитата (Лена @ 30.04.2011 - 13:58)
В смысле, не подходит?

И мне интересно.
Всегда поражали подобные вопросы: "Надо нарезать хлеб. Нож не предлагать.", "Надо покрасить стены. Краски и кисточки не предлагать" и т.п.

Спустя 2 минуты, 42 секунды (30.04.2011 - 13:03) Лена написал(а):
Меня поражает, что человек сначала выбрасывает куски кода, а после пытается как-то этот кривой код подогнать под свои мысли.
Задача простая, skolozhabskiy надо просто включить голову и объяснить толково: "это у меня есть сейчас, а после я хочу получить вот это", без какого-либо кода.

Спустя 6 минут, 53 секунды (30.04.2011 - 13:10) walerus написал(а):
По тексту:
Цитата

то есть:

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


Пункт 1.
Получаем новый ключ и новое значение....
Допустим -


$new_data = array('key' => 'Ключ', 'value' => 'Значение');


Получили.

Пункт 2.
Создаем массив, но создаем его В НАЧАЛЕ всего скрипта/цикла/функции, потому что он будет тогда обнуляться... Итак - ПУНКТ 0. Создаем массив А, он же - RESULT...


$result = array();


Создали.
Теперь вернулись к пункту 2. - добавляю в него первую пару ключ-значение.


$result[] = $new_data;


Добавили.

Пункт 3.
"я получаю новые пары клю-значение и мне нужно сохранить их в этом массиве А".


$new_data_1 = array('key' => 'Ключ_1', 'value' => 'Значение_1');
$result[] = $new_data_1;

$new_data_2 = array('key' => 'Ключ_2', 'value' => 'Значение_2');
$result[] = $new_data_2;

$new_data_N = array('key' => 'Ключ_N', 'value' => 'Значение_N');
$result[] = $new_data_N;

print_r($result);


В результате будет:


Array
(
[
0] => Array
(
[
key] => Ключ
[value] => Значение
)

[
1] => Array
(
[
key] => Ключ_1
[value] => Значение_1
)

[
2] => Array
(
[
key] => Ключ_2
[value] => Значение_2
)

[
3] => Array
(
[
key] => Ключ_N
[value] => Значение_N
)

)



Что то не так ? - поправьте либо нужно предоставить кусок кода где это все штука будет использоваться...

Спустя 3 минуты, 14 секунд (30.04.2011 - 13:13) walerus написал(а):
Цитата (neadekvat @ 30.04.2011 - 10:00)
Цитата (Лена @ 30.04.2011 - 13:58)
В смысле, не подходит?

И мне интересно.
Всегда поражали подобные вопросы: "Надо нарезать хлеб. Нож не предлагать.", "Надо покрасить стены. Краски и кисточки не предлагать" и т.п.

Надо нарезать хлеб. Нож не предлагать." - Используем - "струну";
Надо покрасить стены. Краски и кисточки не предлагать" - Используем - Мелки.
rolleyes.gif

Спустя 5 минут, 23 секунды (30.04.2011 - 13:18) Лена написал(а):
walerus
$result = array_merge($new_data_1, $new_data_2);
Велосипед уже есть.

Спустя 2 минуты, 8 секунд (30.04.2011 - 13:21) walerus написал(а):
Цитата (Лена @ 30.04.2011 - 10:18)
walerus
$result = array_merge($new_data_1, $new_data_2);

Хотел и это предложить, но побоялся что человек вообще потеряется ... cool.gif

Спустя 2 минуты, 18 секунд (30.04.2011 - 13:23) neadekvat написал(а):
Цитата (walerus @ 30.04.2011 - 14:21)
Хотел и это предложить, но побоялся что человек вообще потеряется ...

Ага, и предложил красить стены мелками. Браво.

Спустя 2 минуты, 28 секунд (30.04.2011 - 13:25) walerus написал(а):
Цитата (neadekvat @ 30.04.2011 - 10:23)
Цитата (walerus @ 30.04.2011 - 14:21)
Хотел и это предложить, но побоялся что человек вообще потеряется ...

Ага, и предложил красить стены мелками. Браво.

Это был сарказм wink.gif

Спустя 30 минут, 26 секунд (30.04.2011 - 13:56) skolozhabskiy написал(а):
спасибо за многочисленные ответы, но среди них я вижу интересным только walerus с оговоркой, что у меня нет $new_data_1, $new_data_2, $new_data_3 и так далее. а есть $new_data и все!

вот как далее если учесть это обстоятельство?


$new_data = array('key' => 'Ключ_1', 'value' => 'Значение_1');
$result = array();
$result[] = $new_data;
новое значение пары:
$new_data = array('key' => 'Ключ_2', 'value' => 'Значение_2');
$result[] = $new_data;

print_r($result);


по поводу краски, хлеба и ножей я в нескольких постах подробнейшим образом объяснил задачу, а привел просто модель.

объединение массивов не проходит - пробовал.

спасибо за любую помощь.

Спустя 2 минуты, 48 секунд (30.04.2011 - 13:59) neadekvat написал(а):
skolozhabskiy, вот я так и не понял, что ты хочешь, если уже высказанное тебе не подходит.
Создай нормальные прототипы того, что есть в начале и что должно быть в конце, распечатай print_r и покажи здесь.

Спустя 28 минут, 52 секунды (30.04.2011 - 14:27) walerus написал(а):
Цитата (skolozhabskiy @ 30.04.2011 - 10:56)
спасибо за многочисленные ответы, но среди них я вижу интересным только walerus с оговоркой, что у меня нет $new_data_1, $new_data_2, $new_data_3 и так далее. а есть $new_data и все!

вот как далее если учесть это обстоятельство?


$new_data = array('key' => 'Ключ_1', 'value' => 'Значение_1');
$result = array();
$result[] = $new_data;
новое значение пары:
$new_data = array('key' => 'Ключ_2', 'value' => 'Значение_2');
$result[] = $new_data;

print_r($result);


по поводу краски, хлеба и ножей я в нескольких постах подробнейшим образом объяснил задачу, а привел просто модель.

объединение массивов не проходит - пробовал.

спасибо за любую помощь.

Покажи кусок цикла в которой генерируется этот $new_data, из того что я писал, потом ты поправил - все работает, будет массив $result со всеми данными, которые туда добавились...

Или опиши все что должно быть выполнено твоим скриптом, просто получается так - все примеры работают, НО, не то что мне надо, а что мне надо... это то что вы уже написали - непонятно просто...

Уже по пунктам все расписано, скажите/покажите, что должно получиться, вариантов слияния, прибавления, добавления массивов уже 2ве страницы исписано.
rolleyes.gif rolleyes.gif

Спустя 2 минуты, 22 секунды (30.04.2011 - 14:30) Mirexzpalich написал(а):
Может array_merge?

$array = array ("color" => "green", "shape" => "trapezoid");
$array = array_merge ($array, array('hair'=>'blond'));
print_r($result);

Спустя 4 минуты, 20 секунд (30.04.2011 - 14:34) skolozhabskiy написал(а):
еще раз о задаче:

есть переменные ключ и значение, которым по ходу выполнения сценария присваиваются разные значение.
Внимание : одна переменная ключ и одна переменная значение!

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

код пример (так как дело не вскрипте выполнения и присваивания переменным ключ-значение):


программно после выполнения сценария переменным ключа и значения присваиваются
$new_ключ = 'Ключ_1;
$new_значение = '
Значение_1';
создаем массив
$result = array();
и заносим в него первую запись
$result[$new_ключ] = $new_значение;



далее переменные $new_ключ и $new_значение (они объявлены только один раз в коде!!!) получают новые данные и теперь новую пару нужно добавить в наш массив $result.

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

print_r($result);


надеюсь что объяснил все правильно и детально.

P.S. в моей задаче переменной $new_data нет, я подробно уже описал еще раз задачу.
с циклом сценария все тоже отлично, дело не в нем.
переменной ключ допустим присваивается какое-нибудь значение , а переменной значение присваивается ее значание, цикл сценария в данном вопросе не играет никакой роли.

спасибо за помощь и любые идеи

Спустя 41 секунда (30.04.2011 - 14:35) walerus написал(а):
Цитата (Mirexzpalich @ 30.04.2011 - 11:30)
Может array_merge?

$array = array ("color" => "green", "shape" => "trapezoid");
$array = array_merge ($array, array('hair'=>'blond'));
print_r($result);

Уже было выше ), читаем внимательно ;).

Я вот что тут подумал, а человек который ТС, не обновляет "тупо" страницу выполнения скрипта, т.к. у него всегда почему то 1н и тот же результат - "заносится один элемент" ???

В общем, ждем либо кусок его кода, либо я фз )) сидеть догадываться уже устал ))

Спустя 3 минуты, 18 секунд (30.04.2011 - 14:38) skolozhabskiy написал(а):
ну я же описал задачу. ну какое мерге здесь можно применить? нет предустановочного масисва, он образуется в ходе выполнения скрипта. пожалуйста, читайте внимательно мои объяснения, если их собрать со всех страниц, то вы не найдете там никаких отличий, а приведенный мною пример просто модель, на которой я пытался реально показать свои рассуждения, но решения пока не нашел.

Спустя 49 секунд (30.04.2011 - 14:39) walerus написал(а):
Дык это ... !!! - массив $result - в который ты пихаешь все НОВЫЕ данные, ты его где то создаешь?, если ДА - то где ?

нужно в его ОБНУЛЯТЬ В НАЧАЛЕ скрипта, чтоб он не обнулялся по ходу выполнения скрипта.

и еще, поставь print_r($result);, после КАЖДОГО добавления, и отследишь где у тебя обнуляется массив, и что вообще в него попадает, если очень трудно стучи в аську, аська в профаиле...

Спустя 2 минуты, 39 секунд (30.04.2011 - 14:42) skolozhabskiy написал(а):
обнуления нет, смотрите пример ниже


вот кусок кода модели проблемы:

<?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 0 : { $key = 'пример №1'; $value = $ar_1; }
break;
case 1 : { $key = 'пример №2'; $value = $ar_2; }
break;
case 2 : { $key = 'пример №3'; $value = $ar_3; }
break;
endswitch;

$array = (!isset($array) ? array($key => $value) : $array+= array($key => $value));
?>

реального кода пока нет. это и есть вопрос.
а данный пример не заносит новых данных в массив, а только их переписывает.
остальная задача очень детально описана в предыдущем посте.

сспасибо

Спустя 10 минут, 50 секунд (30.04.2011 - 14:52) walerus написал(а):
Ну Вы вот поражаете, Вы сами тут цикл видите ?, я лично нет, по ходу скрипта - он, соответственно
$num = rand(0,2); 


получит ОДИН раз число, допустим - число=1, дальше, скрипт, по
switch ($num) : 


переключится на
case 1 : { $key = 'пример №2'; $value = $ar_2; } 
, таким образом он занесет в переменные


$key = 'пример №2';
$value = $ar_2;


и потом по условию

$array = (!isset($array) ? array($key => $value) : $array+= array($key => $value));


он выполнит так... Есть ли у нас массив $array - его НЕТУ у нас, ага, значит запишем в него $array = array($key => $value);

все, дальше СТОП скрипт.

Где и КАК он должен добавить еще данные ?, обновляя страницу, Вы запустите все по кругу, если Вам нужно именно так, тогда вам нужно писать в файл ТЕКУЩИЕ значения массива, потом, при обновлении скрипта/страницы, считывать данные из файла, прибавлять туда новые и опять ПЕРЕЗАПИСЫВАТЬ файл...

Вроде все разжевал )

Спустя 8 минут, 6 секунд (30.04.2011 - 15:01) skolozhabskiy написал(а):
и опять все сначала, пожалуйста,

1. воспринимайте мой пример как модель проблемы.
2. никакого цикла привязанного к данной проблеме нет!!
3. есть две переменные, например, $my_key и $my_value
4. по ходу выполнения скрипта им присваются значения (переменные объявлены один раз, а значения им присваиваются разные!)
5. далее надо просто сохранять эти значения в ассоциативном массиве.
6. я понимаю как работает конструкция если..... то...... я опять повторюсь, что привел просто модель моих рассуждений для того, чтобы меня здесь поправили.

пока я не вижу решения.

может есть еще опытные программисты, которые помогут разобраться.

спасибо

Спустя 4 минуты, 27 секунд (30.04.2011 - 15:05) Mirexzpalich написал(а):
Offtop

Спустя 3 минуты, 27 секунд (30.04.2011 - 15:08) walerus написал(а):
Я не пойму, что не так ТУТ пишут ?, мне интересно, вот скажите, по какому принципу должен наполняться результирующий массив?, давайте, прям тут, построчно, ход выполнения скрипта, как я расписал выше, только не нужно писать читайте выше и так далее, либо народ здесь "туповат" в том числе и я, либо идет тупо набор вопрос/ответ - НИ О ЧЕМ... и тему можно закрывать, и ТС тоже, 3ри страницы разговора ни о чем, куча примеров, все расписано уже до немогу...

И так, жду ход работы скрипта Вашими словами...
от
<?php // Запуск пшп скрипта

...
до

// Конец работы скрипта - итог

$result = ...
?>

Спасибо.

Спустя 2 минуты, 32 секунды (30.04.2011 - 15:11) walerus написал(а):
Цитата

Mirexzpalich

тут твой код



Поясните, чем Ваш код отличается от его кода, если сравнивать результаты ??

Спустя 6 минут, 3 секунды (30.04.2011 - 15:17) skolozhabskiy написал(а):
я не ситаю никого здесь тупыми. это во-первых
во-вторых вот последовательность задачи, которую я уже много кратно описывал:

1. есть две переменные, например, $my_key и $my_value (переменные объявлены один раз!)
4. по ходу выполнения скрипта им присваются значения (разные!)
5. далее надо сохранять эти значения в ассоциативном массиве, дописывая каждую новую пару в конец массива.

я уж не знаю как еще описать можно задачу?
вы считате это плохим описанием?

спасибо

Спустя 3 минуты, 26 секунд (30.04.2011 - 15:20) walerus написал(а):
Нет, ни в коем случае плохим, оно непонятно...

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

откуда будет браться каждая новая пара ???

Спустя 6 минут, 2 секунды (30.04.2011 - 15:27) Mirexzpalich написал(а):
walerus
По сути ни чем....
А аФФФтор жжжжет.... Я так понял он хочет добавлять и добавлять ни чего не делая??? или что?

1) АфтАр, ты понимаешь, что ты добавляешь элемент только 1 раз?

2) На данном тобой примере может быть максимум только 3!!! 3!!! элемента!!! Надеюсь ты это тоже понимаешь....

3) 2-е можно обойти, добавляе не просто пары [ключ]=>"значение", а array([ключ]=>"значение")...

Спустя 4 минуты, 23 секунды (30.04.2011 - 15:31) skolozhabskiy написал(а):
Mirexzpalich
извините, но вы в очередной раз не понимаете сути вопроса.

по ходу скрипта переменным ключа и значения присваются определенные данные, например,

$my_key = 'ключ1';
$my_value ='значение1';

эти данные заносятся в массив, напрммер, $array = array($my_key => $my_value);

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

далее переменным $my_key и $my_value по ходу безразоично какого кода присваются новые значения и вот этими значениями (парой - ключ2-значение2, например) нужно дополнить массив $array и в итоге получить:

$array = (ключ1-значение1. ключ2-значение2);

и так далее.................

$array = (ключ1-значение1. ключ2-значение2.....ключN-значениеN);

теперь вы удовлетворены описанием. уж куда еще детальнее.

спасибо

Спустя 13 минут, 51 секунда (30.04.2011 - 15:45) Mirexzpalich написал(а):

$count_element_in_array = 5;//Сколько элементов тебе надо? 5?

$alfavit = '1234567890qwertyuiopasdfghjklzxcvbnm';

for($i=1;$i<=$count_element_in_array;$i++)
{
//Создаем пару ключ=> значение
$key = substr(str_shuffle($alfavit),0,5); //ключ
$value = substr(str_shuffle($alfavit),0,5); //значение
//добавляем

$array = (!isset($array)|| !is_array($array)) ? array($key => $value) : array_merge($array,array($key => $value));
}
print_r($array);

Спустя 1 минута, 35 секунд (30.04.2011 - 15:46) walerus написал(а):
Ну так в чем трабл то ?, я вот честно сам не пойму, то ли я как то не так печатаю, то ли что то еще мешает Вам понять...

1. Создали Вы где то там в начале результирующий массив, будет он у нас
$result = array();

2. По ходу скрипта переменным ключа и значения присваются определенные данные, например

$my_key = 'ключ1';
$my_value ='значение1';

эти данные заносятся в массив
$result = array($my_key => $my_value);

3. Далее идет неважно что и сколько раз и где то там, переменным присваивается НОВОЕ значение

$my_key = 'ключ2';
$my_value ='значение2';

нужно дополнить массив $result и в итоге получить:
$result = (ключ1-значение1. ключ2-значение2);

ДЕЛАЕМ:


$result = array();

$my_key = 'ключ1';
$my_value ='значение1';

$result = array($my_key => $my_value);

/*
тут идет много Вашего кода
и где то тут получаем новые данные
*/


$my_key = 'ключ2';
$my_value ='значение2';

$result = array_merge($result, array($my_key => $my_value));

print_r($result);




Резульат


Array
(
[
ключ1] => значение1
[ключ2] => значение2
)


Выше приведенные все скрипты, работали так же, НО, результат был таким

 
Array
(
[
0] => Array
(
[
key] => Ключ_1
[value] => Значение_1
)

[
1] => Array
(
[
key] => Ключ_2
[value] => Значение_2
)

[
2] => Array
(
[
key] => Ключ_N
[value] => Значение_N
)

)



Вы разницу замечаете ?

Если да - то почему не сказали что Вам нужен "ОДНОМЕРНЫЙ" массив,
если нет - тогда это уже другая проблема...

Теперь все как надо ?

Спустя 10 минут, 41 секунда (30.04.2011 - 15:57) skolozhabskiy написал(а):
извините, но я не получаю такого результата как Вы

вот код с Вашими правками:


<?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 0 : { $key = 'augusto'; $value = $ar_1; }
break;
case 1 : { $key = 'sikorsky'; $value = $ar_2; }
break;
case 2 : { $key = 'mobile'; $value = $ar_3; }
break;
endswitch;

if (!isset($result)) {
$result = array();
$result = array($key => $value);
}
else {
$result = array_merge($result, array($my_key => $my_value));
}

print_r($result);
?>


в результате его я получаю следующее:

$num = 2
Array ( [mobile] => Array ( [0] => w [1] => m [2] => n ) )

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

что не так здесь?

спасибо

Спустя 2 минуты, 49 секунд (30.04.2011 - 16:00) Mirexzpalich написал(а):
facepalm.jpg
В ТОПКУ АФФТОРА!!!! Пусть идет книжки читать.... Может уму научится...

Спустя 2 минуты, 20 секунд (30.04.2011 - 16:02) skolozhabskiy написал(а):
Mirexzpalic
спасибо, я так и сделаю вслед за вами

а пока всеже хочу раобраться с вопросом.

спасибо

Спустя 44 секунды (30.04.2011 - 16:03) walerus написал(а):
Кстати - это самые азы работы с массивами, купите книжку по пыхе, будет гораздо легче Вам, хотя бы чтоб правильно написать проблему, а из за "непоняток", разводим демагогию на 5ть листов....


Теперь по делу, Вы ... извините не знаю как Вас по Батюшке, читаете что я для Вас СПЕЦИАЛЬНО пишу ??

Цитата

Где и КАК он должен добавить еще данные ?, обновляя страницу, Вы запустите все по кругу, если Вам нужно именно так, тогда вам нужно писать в файл ТЕКУЩИЕ значения массива, потом, при обновлении скрипта/страницы, считывать данные из файла, прибавлять туда новые и опять ПЕРЕЗАПИСЫВАТЬ файл...


Помните я писал, на 3й странице... Так вот, при обновлении страницы, скрипт все СБРАСЫВАЕТ/ОЧИЩАЕТ/УДАЛЯЕТ...

Пишу еще раз жирными букавами

Если Вам нужно ЧТОБЫ ПРИ ОБНОВЛЕНИИ СТРАНИЦЫ, МАССИВ ДОПИСЫВАЛСЯ, - тогда вам нужно писать в файл ТЕКУЩИЕ значения массива, потом, при обновлении скрипта/страницы, считывать данные из файла, прибавлять туда новые и опять ПЕРЕЗАПИСЫВАТЬ файл !!!!


Спустя 8 минут, 28 секунд (30.04.2011 - 16:11) skolozhabskiy написал(а):
хорошо, walerus, вы мастер своего дела, я только начал после паскаля. не спорю вы правы, тогда помогите мне как проверить код который я описал на базе вашего? чтобы убедиться, что он работает и в массив последовательно вносятся пары клю-значение. если не сложно. в книжках все написано стандартно, а вот такие навыки можно получить только у профессионалов. если можно маленькое дополнение как реально удостовериться что код работает (как можно рямо на странице без перезагрузки менять значение $num):

<?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 0 : { $key = 'augusto'; $value = $ar_1; }
break;
case 1 : { $key = 'sikorsky'; $value = $ar_2; }
break;
case 2 : { $key = 'mobile'; $value = $ar_3; }
break;
endswitch;

if (!isset($result)) {
$result = array();
$result = array($key => $value);
}
else {
$result = array_merge($result, array($my_key => $my_value));
}

print_r($result);
?>


спасибо

Спустя 3 минуты, 7 секунд (30.04.2011 - 16:14) Santehnick написал(а):
Цитата (skolozhabskiy @ 30.04.2011 - 12:57)
извините, но я не получаю такого результата как Вы

вот код с Вашими правками:


<?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 0 : { $key = 'augusto'; $value = $ar_1; }
  break;
  case 1 : { $key = 'sikorsky'; $value = $ar_2; }
  break;
  case 2 : { $key = 'mobile'; $value = $ar_3; }
  break;
endswitch;

if (!isset($result)) {
  $result = array();
  $result = array($key => $value);
}
else {
  $result = array_merge($result, array($my_key => $my_value));
}

print_r($result);
?>


в результате его я получаю следующее:

$num = 2
Array ( [mobile] => Array ( [0] => w [1] => m [2] => n ) )

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

что не так здесь?

спасибо

ахаха упал :D автор думает, что при обновлении страницы, у него в массив должен дописаться новый элемент. И ему тут уже тысячу раз написали, что при обновлении скрипт идет заного, то есть заново создается этот пустой результирующий массив и в него добавляется (в пустой массив) эта первая пара ключ значение, все скрипт остановился, далее когда он обновляет страницу, интерпретатор начинает снова, с самого начала выполнять твой скрипт, т.е. все чтобы было до этого он забыл блять, начал снова, снова создал пустой массив и опять добавил в него пару ключ значение и остановился. ты понял нет? чтобы сохранить те данные которые у тебя в массиве после обновления страницы их нужно куда-то записать по ходу выполнения скрипта, например в файл или базу данных. Вообще пример какой-то неимоверно тупой, который я даже не знаю для чего использовать то можно.

Спустя 2 минуты, 45 секунд (30.04.2011 - 16:17) skolozhabskiy написал(а):
Santehnick, я полагаю, что если бы вы вместо столь большой тирады о плохом авторе в ветке для начинащих дали ответ на поставленный ранее постом вопрос, было бы меньше места занято на форуме и более поучительно для самого автора. здесь и суть, чтобы научиться или я не прав?

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

спасибо

Спустя 4 минуты, 17 секунд (30.04.2011 - 16:22) walerus написал(а):
Скрипт номер 1

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


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

if (!isset($result)) {
$result = array();
$result = array($key => $value);
}
else {
$result = array_merge($result, array($key => $value));
}

print_r($result);
}


?>


Смотрим на экране вывод, циклом с эмулирована перезагрузка скрипта...


Скрипт номер 2.


<?php

// Проверяем есть ли наш файл

if (file_exists('result_array.dat'))
$result = unserialize(file_get_contents('result_array.dat'));
else
$result = array();

$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 0 : { $key = 'augusto'; $value = $ar_1; }
break;
case 1 : { $key = 'sikorsky'; $value = $ar_2; }
break;
case 2 : { $key = 'mobile'; $value = $ar_3; }
break;
endswitch;

if (!isset($result)) {
$result = array();
$result = array($key => $value);
}
else {
$result = array_merge($result, array($key => $value));
}

print_r($result);

file_put_contents('result_array.dat', serialize($result));


?>


Обновляете до посинения, и в результат будет всегда добавляться НОВЫЙ ключ и значение, это с записью в файл.

Под словом НОВЫЙ - я понимаю новый ключ, т.е. не равный тому который в данный момент уже находится в массиве...


РЕЗУЛЬТАТЫ:
1й скрипт - длинный результ, не стал засирать..

2й скрипт





Array
(
[
augusto] => Array
(
[
0] => a
[1] => b
[2] => c
)

[
mobile] => Array
(
[
0] => w
[1] => m
[2] => n
)

[
sikorsky] => Array
(
[
0] => d
[1] => e
[2] => i
)

)



Вот так вот, и паскаль тут не причем, все с чего то начинают, я тоже не проффи, но понять, что при обновлении страницы все сбросится, ну как бы должны все ))

Спустя 1 минута, 12 секунд (30.04.2011 - 16:23) Santehnick написал(а):
Цитата (skolozhabskiy @ 30.04.2011 - 13:17)
я полагаю, что если бы вы вместо столь большой тирады о плохом авторе в ветке для начинащих дали ответ на поставленный ранее постом вопрос, было бы меньше места занято на форуме и более поучительно для самого автора. здесь и суть, чтобы научиться или я не прав?

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

про работу с файлами прочитай. нужны тебе функции file_get_contents, file_put_contents. Справочник открой и почитай. Мне даже код лень тебе стало писать, когда я как и все догадался о чем речь)

Спустя 3 минуты (30.04.2011 - 16:26) walerus написал(а):
Мне вот теперь чисто интересно, над каким злом работает ТС rolleyes.gif wink.gif ??

Спустя 8 минут, 9 секунд (30.04.2011 - 16:34) skolozhabskiy написал(а):
walerus

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

Santehnick

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

Спустя 2 минуты, 41 секунда (30.04.2011 - 16:37) walerus написал(а):
Да не за что ) Велкам, никто и не отказывал ), просто не совсем понятно было что нужно, вроде все во всех ракурсах расписали, а никак не находим решение.

Надеюсь все у Вас получится. smile.gif

Спустя 27 минут, 19 секунд (30.04.2011 - 17:04) skolozhabskiy написал(а):
да, попутно вопрос.

если добавить в последний пример еще один ключ, аналогичный уже имеющемуся, то этот ключ всегда будет перезаписан первым элементом (клю-значение), а можно сделать, чтобы последним?

спасибо

Спустя 40 минут, 51 секунда (30.04.2011 - 17:45) walerus написал(а):
Не до конца понял вопрос если честно, приведи пример, что хочешь добавить и что в итоге хочешь получить.

Спустя 4 минуты, 32 секунды (30.04.2011 - 17:49) skolozhabskiy написал(а):
вот так правильно? в массиве выстроилась последовательность элементов (ключ-значение), допустим, что сгенерировался следующий элемент и он имеет тот же ключ, который уже есть в массиве, нужно просто переписать этот ключ в его прежней позиции в массиве, присвоив ему не предыдущие значения, а последние сгенерированные значения. в данном случае я заменил функцию array_merge так как она оставляет при добавлении одноименного ключа прежнее значение, а мне нужно последнее.


<?php
$ar_1 = array('a',' b','c');
$ar_2 = array('d',' e','i');
$ar_3 = array('w',' m','n');
$ar_4 = array('z',' x','q');


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

if (!isset($result)) {
$result = array();
$result = array($key => $value);
}
else {
if (array_key_exists($key, $result)) {
$result[$key] = $value;
}
else {
// лучше так
// $result = array_merge($result, array($key => $value));
// или так?

$result += array($key=>$value);
}
}

}


print_r($result);
?>


спасибо

Спустя 13 минут, 19 секунд (30.04.2011 - 18:03) sebastjan написал(а):
Пока писал задание изменилось smile.gif
Снимаю своё мнение

Я так понял это как на подобии корзины покупателя, сфомирован новый элемент массива,его прибавляем, выводе выводим весь масив.
или я что то не так понял?
Только не пойму почему не подходит вариант Лена
Думаю логика такая, считали все элементы ассоциативного масссива и выводите через
foreach

Спустя 5 минут (30.04.2011 - 18:08) skolozhabskiy написал(а):
спасибо за любое мнение. мне хотелось бы услышать мнение по-поводу последнего кода насколько он оптимален и правилен. спасибо

Спустя 3 минуты, 46 секунд (30.04.2011 - 18:11) walerus написал(а):
Не, Вы делаете тоже самое, вот смотрим условие...


if (array_key_exists($key, $result))
{
$result[$key] = $value;
}
else
{
$result = array_merge($result, array($key => $value));
}


Получается, что если в массиве присутствует ключ(допустим ZZZ), то добавляем в массив $result, ячейку с тем же ключом ZZZ по которому искали, значение ключа ZZZ(допустим XXX)

Если же такого ключа нет, то мы все равно добавляем в массив $result, новую ячейку, через функцию array_merge...

этого не надо делать пусть все остается первоначально, все будет работать, но тут уже как выпадет число rand, т.е. если первым выпало число 1, а потом число 3, то в итоге получится значение 'w',' m','n', если же наоборот, в начале выпадет 3, а потом 1, то последняя запись по этому ключу - будет 'd',' e','i'

Вы сильно замарачиваетесь, пробуйте писать полный код своего скрипта, и уже по результату его работы, будет все ясно, а так Вам будет тяжело, так сказать понять что и как в PHP.

Пишите, если чего то не будет ясно, буду позже.

Удачи.


Спустя 9 минут, 37 секунд (30.04.2011 - 18:21) skolozhabskiy написал(а):
спасибо

Спустя 1 минута, 12 секунд (30.04.2011 - 18:22) skolozhabskiy написал(а):
извините, я все понял. вы правы не надо ничего кроме приведенного вами кода - мегре заполняет последним значением. спасибо еще раз

Спустя 16 минут, 28 секунд (30.04.2011 - 18:39) Игорь_Vasinsky написал(а):
huh.gif blink.gif велосипед.

Спустя 1 час, 20 минут, 36 секунд (30.04.2011 - 19:59) killer8080 написал(а):
Блин, принципиально прочитал все 5 страниц. Не перестаёт меня удивлять наш народ. Как по глумится над новичком, так все горазд, а на ошибку, почему то, так никто и не указал.
Во первых
 $result += array($key=>$value);

нельзя так добавлять элементы в массив, правильно так:
 $result[]= array($key=>$value);

Во вторых, это что за бред:

...
$result = array(); // совершенно бессмысленная строка
$result = array($key => $value);
...


В третьих,

..
if (!isset($result)) {
...

какой смысл в этой проверке? Правильней было бы перед циклом один раз инициировать переменную(массив), а потом просто добавлять туда значения.
Пример:
<?php
$ar_1 = array('a',' b','c');
$ar_2 = array('d',' e','i');
$ar_3 = array('w',' m','n');
$ar_4 = array('z',' x','q');

$result = array();
echo "<pre>";
for ($i=0; $i <= 10; $i++)
{
$num = rand(0,3);
echo 'num = '.$num.'<br />';
switch ($num) :
case 0 : $result['augusto'] = $ar_1;
break;
case 1 : $result['sikorsky'] = $ar_2;
break;
case 2 : $result['mobile'] = $ar_3;
break;
case 3 : $result['sikorsky'] = $ar_4;
break;
endswitch;


}

print_r($result);
echo "<pre>";
?>


Спустя 2 часа, 7 минут, 59 секунд (30.04.2011 - 22:07) Guest написал(а):
опять немного запутался.

есть два массива:

$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array(4=>4,5=>5,6=>6));
$dyn_arr = array('example2'=>array(4=>4,5=>1,6=>6,7=>2)); - динамически создаваемый массив

array_merge($mega_array, $dyn_arr );

необходимо массив $dyn_arr записать в $mega_array. как пользоваться функцией array_merge мне понятно, но массив $dyn_arr может иметь разную длину и отличные от предыдущих элементов (ключ-значение) значения. например как в примере.

вопрос - как соединить два массива, чтобы если значения одинаковых ключей несовпадали, то они (знчения складывались), например в примере не совпадают значения ключа 5, значит в результирующем мне нужно чтобы было значения ключа 5 = 6.

спасибо за любую помощь

Спустя 22 минуты, 50 секунд (30.04.2011 - 22:30) skolozhabskiy написал(а):
что-то с постом предыдущим.

опять немного запутался.

есть два массива:

$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array(4=>4,5=>5,6=>6));
$dyn_arr = array('example2'=>array(4=>4,5=>1,6=>6,7=>2)); - динамически создаваемый массив

array_merge($mega_array, $dyn_arr );

необходимо массив $dyn_arr записать в $mega_array. как пользоваться функцией array_merge мне понятно, но массив $dyn_arr может иметь разную длину и отличные от предыдущих элементов (ключ-значение) значения. например как в примере.

вопрос - как соединить два массива, чтобы если значения одинаковых ключей несовпадали, то они (знчения складывались), например в примере не совпадают значения ключа 5, значит в результирующем мне нужно чтобы было значения ключа 5 = 6.

спасибо за любую помощь

Спустя 3 минуты, 35 секунд (30.04.2011 - 22:34) killer8080 написал(а):
skolozhabskiy
например так:
<?php
$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array(4=>4,5=>5,6=>6));
$dyn_arr = array('example2'=>array(4=>4,5=>1,6=>6,7=>2));

foreach($dyn_arr as $key => $val){
if(isset($mega_array[$key])){
foreach($dyn_arr[$key] as $k => $v){
if($mega_array[$key][$k] != $v) $mega_array[$key][$k]+= $v;
}
}

else{
$mega_array[$key]= $val;
}
}


echo "<pre>";
print_r($mega_array);
echo "</pre>";
?>

Спустя 32 минуты, 42 секунды (30.04.2011 - 23:06) skolozhabskiy написал(а):
спасибо

а вот моцй, правда нерабочий код:

<?php
$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array(4=>4,5=>5,6=>6));
$dyn_arr = array('example2'=>array(4=>4,5=>1,6=>6,7=>2));

foreach($dyn_arr as $key => $val){
if(isset($mega_array[$key])){
foreach($dyn_arr[$key] as $k => $v){
if($mega_array[$key][$k] != $v) $mega_array[$key][$k]+= $v;
}
}

else{
$mega_array[$key]= $val;
}
}


echo "<pre>";
print_r($mega_array);
echo "</pre>";
?>

где я ошибаюсь в своих расссуждениях. этот код вообще может работать?

спасибо

Спустя 6 минут, 55 секунд (30.04.2011 - 23:13) killer8080 написал(а):
Цитата (skolozhabskiy @ 30.04.2011 - 22:06)
а вот моцй, правда нерабочий код:

А чем он отличается от моего примера?

Спустя 8 минут, 23 секунды (30.04.2011 - 23:22) skolozhabskiy написал(а):
извините я скопировал не тот, но вопрос уже немного посложнее:

а если такие вот массивы:

1. array(2) { [1]=> int(1) [4]=> int(1) } array(1) { ["example1"]=> array(2) { [1]=> int(1) [4]=> int(1) } } array(1) { ["example2"]=> array(2) { [1]=> int(1) [4]=> int(1) } }

2. array(1) { [1]=> int(1) } array(1) { ["example1"]=> array(1) { [1]=> int(1) } }

извините я допусти ошибку массивы выглядят так:

$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array(4=>4,5=>5,6=>6));
$dyn_arr = array(4=>4,5=>1,6=>6,7=>2);
$key = 'example2';

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

вот так работает правильно:


if(isset($mega_array[$key])){
foreach($dyn_arr as $k => $v){
if($mega_array[$key][$k] != $v) $mega_array[$key][$k]+= $v;
}
}

else{
$mega_array[$key]= $val;
}


но ошибка на строчке foreach($dyn_arr as $k => $v) - Notice: Undefined offset: 7 in......


спасибо

Спустя 21 минута, 28 секунд (30.04.2011 - 23:43) skolozhabskiy написал(а):
вот так не получется6

$i = 0;
if(isset($mega_array[$key])){
foreach($dyn_arr as $k => $v) {
if ($i > count($mega_array[$key])) { exit; }
if ($mega_array[$key][$k] != $v) $mega_array[$key][$k]+= $v;
$i++;
}
}

else{
$mega_array[$key]= $val;
}


а где ошибка?

Спустя 16 минут, 33 секунды (1.05.2011 - 00:00) killer8080 написал(а):
<?php
$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array(4=>4,5=>5,6=>6));
$dyn_arr = array('example2'=>array(4=>4,5=>1,6=>6,7=>2));

foreach($dyn_arr as $key => $val){
if(isset($mega_array[$key])){
foreach($dyn_arr[$key] as $k => $v){
if(isset($mega_array[$key][$k]) && $mega_array[$key][$k] != $v) {
$mega_array[$key][$k]+= $v;
}
else{
$mega_array[$key][$k]= $v;
}
}
}

else{
$mega_array[$key]= $val;
}
}


echo "<pre>";
print_r($mega_array);
echo "</pre>";
?>

Спустя 17 минут, 9 секунд (1.05.2011 - 00:17) skolozhabskiy написал(а):
это пример с корректированными масивами?


$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array(4=>4,5=>5,6=>6));
$dyn_arr = array(4=>4,5=>1,6=>6,7=>2);
$key = 'example2';


я допустил ошибку, неверно задав второв массив.

извините, спасибо

Спустя 20 минут, 56 секунд (1.05.2011 - 00:38) skolozhabskiy написал(а):
спасибо с этим разобрался, а как будет выглядеть ваш последний пример для второго массива такого вида:

вариант 1.

$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array
$dyn_arr = array(4=>4,5=>1,6=>6,7=>2);
$key = 'example2';


Вариант 2.
$mega_array = array('example1'=>array(1=>1,2=>2,3=>3), 'example2'=>array(4=>4,5=>5,6=>6));
$dyn_arr = array(4=>4,6=>3);
$key = 'example2';


то есть в первом случае (вариант 1) динамический массив был больше по числу элементов, а сейчас он стал меньше (вариант 2) и теперь переданное число элементов $mega_array должно быть равно числу элементов $dyn_arr, а именно 2;


<?php
foreach($dyn_arr as $key => $val){
if(isset($mega_array[$key])){
foreach($dyn_arr[$key] as $k => $v){
if(isset($mega_array[$key][$k]) && $mega_array[$key][$k] != $v) {
$mega_array[$key][$k]+= $v;
}
else{
$mega_array[$key][$k]= $v;
}
}
}

else{
$mega_array[$key]= $val;
}
}


echo "<pre>";
print_r($mega_array);
echo "</pre>";
?>


есть универсальное решение вашего кода, предусматривающее число элементов - больше меньше или равно?

я нашел такой вариант кода:

$result = array_diff_key($mega_array[$key],$dyn_arr);
foreach($result as $k => $v) {
if(array_key_exists($k, $mega_array[$key])){
unset($mega_array[$key][$k]);
}
}



можно ли это представить ввиде одного универсального кода с вашим? есть более лучшее и лаконичное решение?

спасибо

Спустя 18 часов, 41 минута, 35 секунд (1.05.2011 - 19:19) killer8080 написал(а):
Цитата (skolozhabskiy @ 1.05.2011 - 00:38)
и теперь переданное число элементов $mega_array должно быть равно числу элементов $dyn_arr, а именно 2;

я не понял что ты хочешь получить?

Спустя 5 часов, 2 минуты, 5 секунд (2.05.2011 - 00:21) skolozhabskiy написал(а):
добрый вечер,

удалять записи из первого мега масива, которых уже нет во втором.

спасибо

Спустя 10 часов, 49 минут, 52 секунды (2.05.2011 - 11:11) killer8080 написал(а):
Ну тогда нужно просто заменить соответствующий элемент большого массива, на содержимое второго.
<?php

foreach($dyn_arr as $key => $val){

$mega_array[$key]= $val;

}

echo "<pre>";
print_r($mega_array);
echo "</pre>";
?>

Спустя 6 минут, 37 секунд (2.05.2011 - 11:18) CyberOrcX написал(а):
короче, php-шники я не должен краснеть за Вас user posted image
ТопикСтартер, знаешь что такое CRON? user posted image

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

а CRON - это демон времен Unix..
чтобы какой-то скрипт работал вышеупомянутым образом, в ISPManager'е хостинга нужно найти CRON (эти 4 магических символа, обозначащие демона времен Unix) и добавить задачу в CRON (о, все те же самые 4 магических символа), и еще добавить путь к скрипту и настроить то, когда он будет запускаться

на самом деле, вроде как просто всё

Спустя 4 минуты, 47 секунд (2.05.2011 - 11:23) killer8080 написал(а):
CyberOrcX
причём здесь крон? Речь идет о том как работать с массивами, а не о какой то практической задаче.

Спустя 42 минуты (2.05.2011 - 12:05) CyberOrcX написал(а):
killer8080
Что Вы подразумеваете под практикой?

Спустя 24 секунды (2.05.2011 - 12:05) walerus написал(а):
Вот я все читаю читаю, но УЖЕ не пишу, в голове бардак полный, ТС - дай уже полное задание что тебе нужно написать или что ты там пишешь, что толку то писать как и что нужно делать тебе?, если один кусок кода тебе напишут, ты тут же спрашиваешь уже про другое, в другом помогли, ты что то третье придумываешь, зачем так делать?, не можешь что то написать - УЧИТЬ МАТ ЧАСТЬ хотя бы, а так шаг за шагом писать весь скрипт, ну не дело, либо давай задание, и готовься отблагодарить людей, либо покупай книгу по PHP, и читать читать читать.

Честно уже накипело малость, ну что за пост на 7мь страниц, по работе с массивами? Да и примеры которые ты приводишь, они размытые.

В общем, пиши что нужно сделать полностью, на реальных данных...

Не пытался никого обидеть или еще что то cool.gif

Спустя 10 минут, 42 секунды (2.05.2011 - 12:16) killer8080 написал(а):
Цитата (CyberOrcX @ 2.05.2011 - 12:05)
Что Вы подразумеваете под практикой?

под практикой я подразумеваю практику! Если бы автор спросил, например, как обновлять курс валют раз в стуки, то ваш коммент был бы справедлив. Но каким боком планировщик относится к работе с массивами? Я не понял ваш ход мыслей.

Спустя 22 минуты, 47 секунд (2.05.2011 - 12:39) CyberOrcX написал(а):
killer

Цитата
Но каким боком планировщик относится к работе с массивами? Я не понял ваш ход мыслей.


Чтобы через какой-то промежуток времени добавлять элемент в какой-то глобальный массив

Спустя 9 минут, 21 секунда (2.05.2011 - 12:48) killer8080 написал(а):
Цитата (CyberOrcX @ 2.05.2011 - 12:39)
Чтобы через какой-то промежуток времени добавлять элемент в какой-то глобальный массив

а разве ТС об этом спрашивал? Может я что-то упустил. blink.gif

Спустя 2 минуты, 53 секунды (2.05.2011 - 12:51) neadekvat написал(а):
Просто поразительно. Шестая страница кончилась, а в теме еще даже не поняли, чего хочет ТС.

Спустя 1 минута, 36 секунд (2.05.2011 - 12:52) CyberOrcX написал(а):
вроде как было такое smile.gif

Спустя 2 минуты, 50 секунд (2.05.2011 - 12:55) killer8080 написал(а):
Цитата (CyberOrcX @ 2.05.2011 - 12:52)
вроде как было такое

где??? sad.gif Впрочем это не важно, пусть автор сам объяснит что пытается сделать cool.gif

Спустя 1 минута, 50 секунд (2.05.2011 - 12:57) CyberOrcX написал(а):
ды было такое... зуб даю ))

Спустя 38 секунд (2.05.2011 - 12:58) CyberOrcX написал(а):
жаловался, что "вот такой вот код не добавляет элементов"

Спустя 5 часов, 29 минут, 30 секунд (2.05.2011 - 18:27) skolozhabskiy написал(а):
добрый вечер. спасибо за помощь. с самого начала был один и тот же вопрос. который крутился вокруг двух массивов, когда я разобрался вариантом когда второй массив больше первого или равен, встал вопрос о продолжении дискуссии о том как будет вести себя если второй массив будет меньше первого, сейчас вопрос уже мне понятен.

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

всех с праздниками и наилучшие пожелания.

спасибо.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.