Добавить в масив значение, но не в конец

IvanShumkov

Новичок
Добавить в масив значение, но не в конец

Как добавить в ассоциативный масив значение но не в конец а в заданную позицию.

Тоесть:
PHP:
$array = array(
'one' => 1,
'three' => 3,
);

$array['two'] = 2;
foreach($array as $k=>$v)
print $v;
Выведет по порядку добавления. Как добавить в масив под первое значение?
 

svetasmirnova

маленький монстрик
А зачем в ассоциативном массив надо добавлять значение в определённую позицию?
 

IvanShumkov

Новичок
Чтобы когда форичем проходишь по масмву, должен был быть свой порядок.
 

Мутник

Новичок
что то ты не то сделать хочешь.. ассоциативный он на то и ассоциативный... ;)
 

alexhemp

Новичок
IvanShumkov

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

alpine

Новичок
IvanShumkov
PHP:
$array = array( 
'one' => 1, 
'three' => 3, 
); 
$array['two'] = 2; 
sort($array)
foreach($array as $k=>$v) 
print $v;
:D
 

svetasmirnova

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

Сделать так, как ты хочешь мне способ неизвестен. Одной функцией имеется в виду. Но если очень хочется, можно [m]array_splice[/m] посмотреть.
 

IvanShumkov

Новичок
Сам понимаю что хочу того, чего не надо хотеть. Но обьясню задачу:
PHP:
// масив конфигурации функции
$array = array(
'button1' => 1,
'button3' => 3,
);

// если редактирование, то добавить еще одну кнопку, между двумя
if ($page == 'edit') 
{
$array['button2'] = 2;
}

// функция которая парсит кнопки
echo parse($array);

alpine
Для частного случая кончено.
 

xionik

Новичок
Re: Добавить в масив значение, но не в конец

Может стоит просто сделать ksort, а ключи назвать попроще, вроде как "1", "2", "3"... Да и учитывая приведенный пример, может стоит отказаться от ассоциативного массива в пользу одномерного.
 

xionik

Новичок
IvanShumkov пусть даже и так. но что мешает использовать ksort?
 

IvanShumkov

Новичок
svetasmirnova
array_splice с ассациативными масивами не умеет работать.

-~{}~ 05.09.05 01:47:

xionik
Вы предлагаете мне названия кнопок писать исключительно основываясь на их порядке?

-~{}~ 05.09.05 01:48:

alpine
Прочитал. Есть функции только для не асоциативных масивов.
 

xionik

Новичок
IvanShumkov ответный вопрос: каким же образом, вы будете определять, каким по-порядку должен быть вновь "присунутый" элемент массива?
 

ForJest

- свежая кровь
IvanShumkov
По-моему тривиальная задача.
PHP:
<?php
function insert_before($array, $key_pos, $key_dest, $value)
{
     $result = array();
     foreach(array_keys($array) as $key)
     {
          if ($key == $key_pos)
          {
               $result[$key_dest] = $value;
          }
          $result[$key] = $array[$key];
     }
     return $result;
}
$test = array('a'=> 1, 'b'=>2);
echo '<pre>', print_r($test, 1), print_r(insert_before($test, 'b', 'c', 3), 1), '</pre>';

?>
Лучше иметь функцию для вставки "перед", т.к. только с помощью её можно вставить перед первым элементом.
 

xionik

Новичок
ForJest ты наверное не понял, товарищу надо вставлять в любое место массива по его желанию.
 

ForJest

- свежая кровь
xionik
Давай, раз уж ты первый день на форуме разберёмся с некоторыми моментами.
1. Для того чтобы в топике рассказывать кто что понял или не понял - есть спрашивающий.
2. Для того чтобы указывать кому и как себя вести (включая советы кланяться в ноги) существуют модераторы.
3. Для того чтобы избавить форум от флудеров существует группа Read Only Team - для излишне ретивых новичков, которые желают писать лишь ради того чтобы писать.
 

IvanShumkov

Новичок
alpine
Перечитал еще раз и не нашел. Ткните меня мордой пожалуйста.

ForJest
Перебором то проблем нет, думал можно стандартными функциями php сделать.
 

xionik

Новичок
ForJest отлично. но чем я не прав, что сказал тебе, что твой код не сюда?
 
Сверху