Как создать массив на основе соседнего ключа на массиве в PHP - PullRequest
0 голосов
/ 26 марта 2019

Ниже мой образец массива.как получить соседний массив.проверьте соседний массив и если следующий массив имеет один элемент и key = 4.добавить это значение в массив ранее

$data = array(
  array('so','item 1','details 1','date 1','qty 1'),
  array('so','item 2','details 2','date 2','qty 2'),
  array(4 => 'details of 22'),
  array('so','item 3','details 3','date 2','qty 3'),
  array(4 => 'details of 33'),
);

Я ожидаю этого результата:

Array(
    [0] => Array
        (
            [0] => so
            [1] => item 1
            [2] => details 1
            [3] => date 1
            [4] => qty 1
        )
    [1] => Array
        (
            [0] => so
            [1] => item 2
            [2] => details 2
            [3] => date 2
            [4] => qty 2
            [D] => details of 22 // added
        )
    [3] => Array
        (
            [0] => so
            [1] => item 3
            [2] => details 3
            [3] => date 2
            [4] => qty 3
            [D] => details of 33// added
        )
)

Ответы [ 3 ]

1 голос
/ 26 марта 2019

Просто итерируйте массив, используя foreach и проверяйте значение элементов в цикле. Если элемент имеет один ключ, равный 4, добавьте его значение к предыдущему элементу.

$newData = [];
foreach($data as $key=>$item){
    if (count($item) == 1 && isset($item[4]))
        $newData[$key-1]['D'] = $item[4];
    else
        $newData[$key] = $item;
}

Результат проверки в демо

0 голосов
/ 26 марта 2019

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

$res = [];
array_walk($data, function ($val, $key) use (&$res) {
    if (empty($val[0]) && !empty($val[4])) { // checking if first and forth index to merge array
        $res[count($res) - 1]['D'] = array_shift($val);
    } else {
        $res[] = $val;
    }
});
print_r($res);

array_walk - применить пользовательскую функцию к каждому члену массива
array_shift - Сместить элемент с начала массива

Выход

Array
(
    [0] => Array
        (
            [0] => so
            [1] => item 1
            [2] => details 1
            [3] => date 1
            [4] => qty 1
        )

    [1] => Array
        (
            [0] => so
            [1] => item 2
            [2] => details 2
            [3] => date 2
            [4] => qty 2
            [D] => details of 22
        )

    [2] => Array
        (
            [0] => so
            [1] => item 3
            [2] => details 3
            [3] => date 2
            [4] => qty 3
            [D] => details of 33
        )

)

( Демо )

0 голосов
/ 26 марта 2019

Используйте следующий код:

<?php

$data = array(
  array('so','item 1','details 1','date 1','qty 1'),
  array('so','item 2','details 2','date 2','qty 2'),
  array(4 => 'details of 22'),
  array('so','item 3','details 3','date 2','qty 3'),
  array(4 => 'details of 33'),
  );

foreach ($data as $key => $items)
{
    $total_items = count($items);

    if ($total_items == "1" && $items[4])
    {
        $previous_array_key = $key - 1;

        $new_data[$previous_array_key]['D'] = $items[4];
    }
    else
    {
        $new_data[$key] = $items;
    }
}

print_r($new_data);

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