我需要将一维数组转换为二维数组。 原始键是用连字符连接的。新数组应使用连字符之前的数字作为新的第一级键,使用连字符之后的字符串作为第二级键。
输入:
Array
(
[71-ctns] => 1
[71-units] => 1
[308-units] => 1
[305-ctns] => 1
[306-units] => 2
)
所需输出:
Array
(
[71] => Array
(
[ctns] => 1
[units] => 1
)
[308] => Array
(
[units] => 1
)
[305] => Array
(
[ctns] => 1
)
[306] => Array
(
[units] => 2
)
)
这可能吗?
这样应该可以了
$merged = array();
foreach($a as $k=>$v){
$t = explode('-',$k);
$id = intval($t[0]);
if(!array_key_exists($id, $merged))
$merged[$id] = array();
$merged[$id][$t[1]] = $v;
}
编辑:
抱歉,你应该使用explode而不是split。
是的,但需要循环(注意:array_map也可以工作,但这个例子更明确):
$fin = array();
foreach( $complex as $item => $val )
{
$pieces = explode('-', $item);
$fin[$pieces[0]] = isset($fin[$pieces[0]])?:array();
$fin[$pieces[0]][$pieces[1]] = $val;
}
找到下面的代码来重构预定义的 php 数组
<?php
$newArray=array();
$result = array("71-ctns"=>1,"71-units"=>1,"308-ctns"=>1,"308-units"=>1,"305-units"=>1,"306-units"=>2);
if(is_array($result) && count($result)>0) {
foreach($result as $key=>$val) {
$getKeyArray = explode("-",$key);
$newArray[$getKeyArray[0]][$getKeyArray[1]] =$val;
}
}
print"<pre>";
print_r($newArray);
?>
使用方括号语法推送子元素时,无需声明空父数组。
为了提高可读性,请使用带有分解密钥字符串的对称数组解构。
PHP 会自动神奇地将数字字符串键转换为整数类型。
代码:(演示)
$array = [
'71-ctns' => 1,
'71-units' => 1,
'308-units' => 1,
'305-ctns' => 1,
'306-units' => 2,
];
$result = [];
foreach ($array as $k => $v) {
[$id, $label] = explode('-', $k);
$result[$id][$label] = $v;
}
var_export($result);
输出:
array (
71 =>
array (
'ctns' => 1,
'units' => 1,
),
308 =>
array (
'units' => 1,
),
305 =>
array (
'ctns' => 1,
),
306 =>
array (
'units' => 2,
),
)