Слияние значений массива в основной массив

1

В PHP, как добавить значения [2] в основную часть массива, а не в качестве вспомогательного массива? Я пробовал array_push, + concatenator и array_merge, но никто не работает.

Array
(
    [0] => 42299.37181713
    [1] => Yes
    [name] => Bob Smith
    [country] => United Kingdom
    [2] => Array
    (
        [0] => Name 1
        [1] => Name 2
        [2] => Name 3
        [3] => 
    )

То, что я ищу/нуждаюсь, - это способ добраться до следующего (и я уверен, что есть простой/правильный PHP способ сделать это!):

Array
(
    [0] => 42299.37181713
    [1] => Yes
    [name] => Bob Smith
    [country] => United Kingdom
    [2] => Name 1
    [3] => Name 2
    [4] => Name 3
    [5] => 

Спасибо за ваши ответы - я опубликовал свое решение в качестве одного из ответов :)

  • 0
    как вы получили этот массив в первую очередь?
  • 0
    Это два отдельных массива, поэтому первая часть - это то, что я получаю в настоящее время, если я использую скажем array_merge.
Показать ещё 4 комментария
Теги:
arrays

5 ответов

1
Лучший ответ

Проблема здесь заключалась в том, что я делал

foreach ($data as $row){

Затем я пытался сделать array_merge в строке $ row или использовать + в $ row, но это значения, а не массивы сами по себе, хотя print_r говорит о своем массиве.

Таким образом, решение состоит в том, чтобы сделать следующее:

foreach ($data as $k=>$row){
     $new_row = array_merge($data[$k],$sub_array);

Таким образом, вы фактически объединяете массив, а не значение, заданное из массива.

  • 0
    Смотрите мой ответ, он работает так, как вы ожидаете.
3
<?php
$myArray = array(
    0 => 42299.371,
    1 => "Yes",
    "name" => "Bob Smith",
    "country" => "United Kingdom",
    2 => array(
        0 => "Name 1",
        1 => "Name 2",
        2 => "Name 3"
        )
    );

$tmp = $myArray[2];
unset($myArray[2]);

$myArray = array_merge($myArray, $tmp);

echo '<pre>';
print_r($myArray);
echo '</pre>';
  • 0
    Извините, $ myArray - это не то, с чем мне нужно работать.
  • 1
    Есть ли шанс исходных данных тогда?
1

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

$a = ['whashington', 'NewYork', 98];
$b = ['fruits', 'clothes', 4];
$a = array_merge($a, $b);

array (size=6)
  0 => string 'whashington' (length=11)
  1 => string 'NewYork' (length=7)
  2 => int 98
  3 => string 'fruits' (length=6)
  4 => string 'clothes' (length=7)
  5 => int 4
1

Вы можете сделать что-то подобное, чтобы получить желаемый результат,

<?php

    $multi_array = array
    (
        0 => 42299.37181713,
        1 => "Yes",
        "name" => "Bob Smith",
        "country" => "United Kingdom",
        2 => array
        (
            0 => "Name 1",
            1 => "Name 2",
            2 => "Name 3",
        )
    );

    $tmp = $multi_array[2];
    unset($multi_array[2]);
    $i = 2;
    foreach($tmp as $value){
        $multi_array[$i] = $value;
        ++$i;
    }

    print_r($multi_array);

?>
1

Я понимаю, что вы заинтересованы в объединении подматрица в качестве элементов родительского массива.

Вы можете добиться этого:

$tmp_arr = array();
foreach ($data as $k=>$v) {
  if (is_array($v)) {
    $tmp_arr = array_merge($tmp_arr, $v);
  } else {
    $tmp_arr[] = $v;
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню