[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Массив. Замена элемента.
Лена
Есть массив вида:
Array
(
[0] => Array
(
[id_address] => 25
[id_country] => 177
[id_state] => 314
[id_customer] => 37
[id_manufacturer] => 0
[id_supplier] => 0
[alias] => My address
[company] =>
[lastname] => aaaaaaaaaa
[firstname] => yyyyyy
[address1] => asdf,12,12
[address2] =>
[postcode] =>
[city] =>
[other] =>
[phone] => 12234567
[phone_mobile] =>
[vat_number] =>
[dni] =>
[date_add] => 2012-05-01 17:15:17
[date_upd] => 2012-05-01 18:11:23
[active] => 1
[deleted] => 0
[id_county] => 48
[country] => Россия
[state] => Татарстан респ.
[state_iso] => TAT
)

)

Мне нужно, если значение элемента с ключом city - пустое, заменить его на другое значение. Но чтобы элемент остался на своем месте, unset и array_push не подойдут.
Делаю так:

$addr = $customer->getAddresses((int)(self::$cookie->id_lang));

foreach($addr as $adrs)
{
if($adrs['city'] == '')
{
$city = Db::getInstance()->getValue("
SELECT `name` FROM `"
._DB_PREFIX_."county`
WHERE id_county ="
. $adrs['id_county']);

$adrs['city'] = $city;
print $adrs['city'] ;
}
}


print "<pre>";
print_r($addr);

Внутри, когда распечатываю print $adrs['city'] - все нормально, элементы заменяются, когда вывожу print_r($addr); - выясняется, что массив остался таким же.



Спустя 6 минут, 16 секунд (1.05.2012 - 18:03) Игорь_Vasinsky написал(а):
а зачем это всё в цикле делать?????

просто

if($addr[0]['city'] == '')
$addr[0]['city'] = 'value';

Спустя 6 минут, 6 секунд (1.05.2012 - 18:09) Лена написал(а):
Их там много в $addr, м. б. $addr[0]['city'],$addr[1]['city'],$addr[2]['city'] и т.д.
Выбираются все адреса, которые сохранил клиент.

Спустя 9 минут, 51 секунда (1.05.2012 - 18:19) Игорь_Vasinsky написал(а):
хорошо, мне просто кажется что вот в этом

Db::getInstance()->getValue("
SELECT `name` FROM `"
._DB_PREFIX_."county`
WHERE id_county ="
. $adrs['id_county']);


опять null проскакивает и перезаписывает. условие видимо спасеть проверку на ! == '' перед присвоением нового значения для ключа city

Спустя 8 минут, 27 секунд (1.05.2012 - 18:27) Лена написал(а):
Я сделала if($city !='') $adrs['city'] = $city;, не помогло.

Спустя 5 минут, 22 секунды (1.05.2012 - 18:33) Игорь_Vasinsky написал(а):
может значение элемента не '', а как null интерпретируется или empty?

Спустя 5 минут, 47 секунд (1.05.2012 - 18:38) Лена написал(а):
Сделала по-другому.

$addr = $customer->getAddresses((int)(self::$cookie->id_lang));
$addr2 = array();

for($i = 0;$i<count($addr);$i++)
{
if($addr[$i]['city'] == '')
{

$city = Db::getInstance()->getValue("
SELECT `name` FROM `"
._DB_PREFIX_."county`
WHERE id_county ="
. $addr[$i]['id_county']);
$addr2[$i] = $addr[$i];
$addr2[$i]['city'] = $city;
}
}


print "<pre>";
print_r($addr2);

Спустя 14 минут, 59 секунд (1.05.2012 - 18:53) Игорь_Vasinsky написал(а):
и как?

Спустя 1 час, 35 минут, 7 секунд (1.05.2012 - 20:29) OleKh написал(а):
Цитата
Внутри, когда распечатываю print $adrs['city'] - все нормально, элементы заменяются, когда вывожу print_r($addr); - выясняется, что массив остался таким же.


Может быть массив $addr - это только выборка из таблицы. А массив $adrs['city'] - это тоже только выборка из таблицы новых значений в массив. Чтобы изменился массив $addr, значения должны измениться в базе. Почему $addr должен измениться?

Может быть как-то так INSERT INTO .... (city) VALUE ('".$adrs['city']."') ...



Спустя 14 часов, 47 минут, 48 секунд (2.05.2012 - 11:16) Лена написал(а):
Игорь_Vasinsky
Работает нормально.


OleKh
Неправильно. $addr - да, массив из базы, $adrs['city'] - не выборка, там же по коду видно, это один элемент из массива элементов $addr , который мы обрабатываем в foreach.

Базу лучше не трогать. Неправильно спроектирована(делала не я), если я начну делать INSERTы/Updatы, у меня магазин где-то да "поплывет".

Спустя 3 часа, 19 минут, 53 секунды (2.05.2012 - 14:36) OleKh написал(а):
Цитата
$adrs['city'] - не выборка, там же по коду видно, это один элемент из массива элементов $addr , который мы обрабатываем в foreach.


Возможно ошибаюсь, т.к. только учусь. По коду мне видно, что если $adrs['city'] эквивалентно пустой строке, в массив $city выбирается name из таблицы `"._DB_PREFIX_."county` где ... определенное условие. Далее массиву $adrs с ключем 'city присваивается значение массива $city. Что делается дальше с $adrs['city'] - не понятно. Если работает нормально, тогда нет необходимости что-то менять.
Быстрый ответ:

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