拆分平面数组的字符串以创建关联行的数组

问题描述 投票:0回答:3

如何让数组内的元素数组再次爆炸。 我有一个像这样的数组

echo "<pre>";
print_r($pks);

结果。

Array
(
    [0] => 2017-04-15||KMTC_HOCHIMINH
    [1] => 2017-04-15||OOCL_NAGOYA
)

我期待这样,

Array
(
    [record] => 
       [1] 2017-04-15
       [2] KMTC_HOCHIMINH
    [record] => 
       [1] 2017-04-15
       [2] OOCL_NAGOYA
)

php 上的什么键可以像这样处理数组。 请指教。

更新 这个怎么样.

Array
(
[0] => Array
    (
        [date] => 2017-04-15
        [vessel] => KMTC_HOCHIMINH
    )

[1] => Array
    (
        [date] => 2017-04-15
        [vessel] => OOCL_NAGOYA
    )

)
php arrays multidimensional-array split delimited
3个回答
1
投票

试试这个,查看现场演示

foreach($pks as $k => $v) {
    $values = explode('||', $v);
    $result[] = array_combine(range(1, count($values)), $values);

    //added
    $res[] = array_combine(['date', 'vessel'], $values) ;

}

结果

Array
(
    [0] => Array
        (
            [1] => 2017-04-15
            [2] => KMTC_HOCHIMINH
        )

    [1] => Array
        (
            [1] => 2017-04-15
            [2] => OOCL_NAGOYA
        )

)

1
投票

您可以使用

array_walk()
(如果需要,也可以直接使用
foreach
):

array_walk($pks, function(&$a) {
    $a = array_combine(['date', 'vessel'], explode('||', $a));
});

Foreach 方法:

foreach($pks as $k => $v) {
    $pks[$k] = array_combine(['date', 'vessel'], explode('||', $v));
}

但是,每个数组的键不会是

record
,因为不可能多次拥有相同的键。

输出:

Array
(
    [0] => Array
        (
            [date] => 2017-04-15
            [vessel] => KMTC_HOCHIMINH
        )

    [1] => Array
        (
            [date] => 2017-04-15
            [vessel] => OOCL_NAGOYA
        )

)

奖励方法,因为我喜欢摆弄数组:

$pks = array_map('explode', array_fill(0, count($pks), '||'), $pks);

0
投票

还有一些解决方案可以提供相同的预期结果。 演示

$arr = [
    '2017-04-15||KMTC_HOCHIMINH',
    '2017-04-15||OOCL_NAGOYA',
];

进行迭代

get_defined_vars()

var_export(
    array_map(
        fn($v) => (fn($date, $vessel) => get_defined_vars())(...explode('||', $v)),
        $arr
    )
);

进行迭代

array_combine()
调用。

var_export(
    array_map(
        fn($v) => array_combine(['date', 'vessel'], explode('||', $v)),
        $arr
    )
);

将参考变量推入结果中。

$result = [];
foreach ($arr as $v) {
    $result[] =& $row;
    [$row['date'], $row['vessel']] = explode('||', $v);
}
var_export($result);

使用立即调用的函数表达式通过引用进行修改。

foreach ($arr as &$v) {
    $v = (fn($date, $vessel) => get_defined_vars())(...explode('||', $v));
}
var_export($arr);
© www.soinside.com 2019 - 2024. All rights reserved.