如何让数组内的元素数组再次爆炸。 我有一个像这样的数组
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
)
)
试试这个,查看现场演示
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
)
)
您可以使用
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);
还有一些解决方案可以提供相同的预期结果。 演示
$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);