поп массив в php - PullRequest
       34

поп массив в php

0 голосов
/ 22 сентября 2009

Мне нужен этот вывод

Array
(
   [id:>] => 0
   [isonline] => 0
   [userclass_id] => 3
)

и я получаю этот вывод с этим кодом:

$pr = array('id:>'=>$id,'isonline'=>'0','userclass_id'=>'3');
print_r($params);

Это хорошо. Но я хочу вытолкнуть новые элементы в один за другим. Пока я использую этот код:

$params = array();
array_push($params,array('userclass_id'=>'3'));  //  Members
array_push($params,array('isonline'=>'0')); // Online
array_push($params,array('id:>'=>$id));  

Я получаю этот вывод:

Array
(
[0] => Array
    (
        [userclass_id] => 3
    )

[1] => Array
    (
        [isonline] => 0
    )

[2] => Array
    (
        [id:>] => 0
    )
)

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

Ответы [ 6 ]

4 голосов
/ 22 сентября 2009

Порядок значений ключей в ассоциативном массиве не имеет значения. Поэтому вам не нужно array_push или array_unshift. Единственное, что вам нужно сделать, это связать ключ со значением, которое вы хотите (или наоборот). Таким образом, вы должны написать следующее для динамического добавления значений в массив $params.

$key = "my_id:2";
$value = "23";
$params[$key] = $value;

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

1 голос
/ 23 сентября 2009

То, что происходило, состояло в том, что вы помещали свой новый массив в текущий массив вместо слияния нового массива со своим старым массивом. $ params = array ();

$params = array_merge($params, array('userclass_id' => 3));  //  Members
$params = array_merge($params, array('isonline'=>'0')); // Online
$params = array_merge($params, array('id:>' => $id));

Или, что еще лучше, вы можете просто вызвать array_merge один раз и передать ему все значения

$params = array_merge($params, array('userclass_id' => 3), array('isonline' => '0'), array('id:>' => $id));

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

$params = array();
$params['userclass_id'] = 3;
$params['isoline'] = 0;
$params['id:>'] = $id;

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

$params = array(
    'userclass_id' => 3,
    'isoline' => 0,
    'id:>' => $id
);
1 голос
/ 22 сентября 2009

Ответ Эренона, вероятно, лучше, но если вы действительно хотите добавить подмассив по одному элементу за раз:

$params = array();
array_unshift($params,array('userclass_id'=>'3'));  //  Members
$params[0]['isonline'] = 0;                         //  Online
$params[0]['id:>'] = $id;

Это работает, потому что array_unshift помещает элементы в начало массива, поэтому новый подмассив будет всегда быть элементом 0.

По соображениям производительности вы можете сделать это вместо этого, чтобы элементы не были перенумерованы постоянно:

$params = array();
$params[] = array('userclass_id'=>'3');  //  Members
end($params); // Move to the new element
$key = key($params); // Get the key of the new element
$params[$key]['isonline'] = 0;           //  Online
$params[$key]['id:>'] = $id;
1 голос
/ 22 сентября 2009

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

Если программно полагаться на порядок массивов в php ... array_pop, array_push, array_shift и array_unshift - ваши друзья Знай их ... люби их ...

php ручной ввод для array_unshift

1 голос
/ 22 сентября 2009
$element = array();
$element['userclass_id'] = 3;
$element['isoline'] = 0;
$element['id:>'] = $id;

$params[] = $element
0 голосов
/ 22 сентября 2009

Как насчет

$aParams[] = array(
    'userclass_id' => 3,
    'isoline' => 0,
    'id:>' => $id
);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...