2013-12-17 3 views
3

У меня есть следующий массив и с помощью array_push & Я получаю неправильный результат.Добавить ключи к существующему значению массива

Массив:

Array 
(
    [0] => 1039 
    [1] => 417 
    [2] => 418 
) 

Массив Нажмите:

array_push($array, array("a","b","c")); 

Результат:

Array 
(
    [0] => 1039 
    [1] => 417 
    [2] => 418 
    [3] => Array 
    (
     [0] => a 
     [1] => b 
     [2] => c 
    ) 

) 

Я хочу а, б, в добавление оценить 417, например.

Disirable результат:

Array 
(
    [1039] => 1039 
    [417] => Array 
    (
     [0] => a 
     [1] => b 
     [2] => c 
    ) 
    [418] => 418 

) 

Как это можно сделать?

РЕШЕНИЕ:

$data = Array (
    0 => 1039, 
    1 => 417, 
    2 => 418, 
); 

foreach($data as $key => $val) { 
    $new_data[$val] = 0; 
} 

foreach($new_data as $k => $v){ 
    if($k == 417){ 
     $new_data[$k] = array('p' => 50, 'pp' => 75); 
    } 
} 
print_r($new_data); 
+0

Ваш желаемый результат не является допустимым объектом PHP. Вы не можете иметь число и массив в одном и том же элементе массива. – Barmar

+0

Привет, Бармар. Я хочу добавить к примеру массив для значения 417 – Bas

+0

Вы хотите заменить значение '$ array [1]' массивом? Что вы подразумеваете под append? –

ответ

0

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

$data = Array (
     0 => 1039, 
     1 => 417, 
     2 => 418, 
    ); 

foreach($data as $key => $val) { 
    if ($val == 417) { 
     $val = array('a','b','c'); 
    } 

    $new_data = array($key => $val); 
    foreach($new_data as $key2 => $val2) { 
     if (is_array($val2)) { 
      $val2 = array(417 => $val); 
     } 
     $new_data1 = array($key2 => $val2); 

    print_r($new_data1); 
    } 
} 
+0

Почти! Где мой номер 417? Мне это тоже нужно. – Bas

+0

Я обновляю код выше. – zai

0

Не следует использовать массив толчок в этом случае (я получил, возможно, отсутствует ваш вопрос)

$arr = array(1,2,3); 
$arr[1] = array('a','b','c'); 
//would output your above example. 
+1

Это заменяет '417' новым подматрицей, оно не добавляет его, как в его желаемом результате (который, предоставленный, на самом деле невозможен). – Barmar

+0

Да, я согласен, что его оригинал невозможен, поэтому я надеялся и молился, это была просто опечатка;) – Zarathuztra

0

Просто сделай это, как этот & все должно работать, как и ожидалось:

array_push($array, "a", "b", "c"); 

страница array_push руководство объясняет, что лучше:

$stack = array("orange", "banana"); 
array_push($stack, "apple", "raspberry"); 
print_r($stack); 

Но если значения вы добавляете в массиве уже, то возможно использовать array_merge вместо:

array_merge($array, array("a","b","c")); 
+0

Это не принесет желаемого результата. – Barmar

+0

Welp, похоже, я не совсем понимаю желаемый результат оригинального плаката. – JakeGould

0

Мой Запуск PHP код:

$arr = array(0=>1039,1=>417,2=>418); 
array_push($arr, array("a","b","c")); 
var_dump($arr); 

И var_dump ($ обр)

array(4) { [0]=> int(1039) [1]=> int(417) [2]=> int(418) [3]=> array(3) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c" } } 
+0

Как это отличается от того, что он делает в своем вопросе? – Barmar

+0

Возможно, вы что-то забыли. Введите свой код (не print_r ($ array)) или var_dump ($ array). – Vitalii

0

Использование array_splice

array_splice($your_arrray, 1, 0, array("a","b","c")); 
1

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

$array[1] .= print_r(array("a","b","c"), true); 

.= делает конкатенации, и передавая true в качестве второго аргумента print_r делает верните строку, которую она напечатала.

Результатом этого является то, что $array[1] - это строка, которая начинается с 417 и за ней следует печатное представление добавленного массива. Там нет никакого массива. Я не уверен, что вы планируете делать с этим, но это соответствует вашему примеру.

Смежные вопросы