如何将多个php数组转化为一个多维数组?
How to transform multiple php arrays into one multi-dimensional array?
我正在尝试将许多具有大部分相似数据的数组转换为一个数组,该数组在有多个值时在键中包含数组。我认为这是在 sql 中作为支点 table 完成的,但出于其他原因我想在 PHP 中这样做。
我要改造:
$og=array();
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'wood');
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'bamboo');
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'concrete');
进入:
$new_array(
'a'=>'cat',
'b'=>'beer',
'c'=>array('wood','bamboo','concrete')
);
我觉得这应该很简单,但不知为何我想不通!
您可以使用以下方法来完成此操作:
$new_array = array();
foreach( $og as $data ) {
foreach( $data as $k => $v ) {
if( ! isset( $new_array[$k] ) )
$new_array[$k] = array();
$new_array[$k][] = $v;
}
}
foreach( $new_array as $k => $data ) {
$new_array[$k] = array_unique($data);
if( count($new_array[$k]) == 1 )
$new_array[$k] = $new_array[$k][0];
}
查看 array_unique()
and array_merge()
。可能有更快的方法来完成此操作,但这是可行的。
您可以遍历 $og 数组并创建新数组,如下所示:
$new_array = array();
foreach($og as $parr=>$carr) {
foreach($carr as $key=>$value) {
if(!array_key_exists($key,$new_array)) {
$new_array[$key] = $value;
}else if(!in_array($value,$new_array)) {
if(is_array($new_array[$key])) {
array_push($new_array[$key],$value);
} else {
$currentVal = $new_array[$key];
$new_array[$key] = array($key=>$currentVal);
array_push($new_array[$key],$value);
}
}
}
}
我正在尝试将许多具有大部分相似数据的数组转换为一个数组,该数组在有多个值时在键中包含数组。我认为这是在 sql 中作为支点 table 完成的,但出于其他原因我想在 PHP 中这样做。
我要改造:
$og=array();
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'wood');
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'bamboo');
$og[] = array('a'=>'cat', 'b'=>'beer', 'c'=>'concrete');
进入:
$new_array(
'a'=>'cat',
'b'=>'beer',
'c'=>array('wood','bamboo','concrete')
);
我觉得这应该很简单,但不知为何我想不通!
您可以使用以下方法来完成此操作:
$new_array = array();
foreach( $og as $data ) {
foreach( $data as $k => $v ) {
if( ! isset( $new_array[$k] ) )
$new_array[$k] = array();
$new_array[$k][] = $v;
}
}
foreach( $new_array as $k => $data ) {
$new_array[$k] = array_unique($data);
if( count($new_array[$k]) == 1 )
$new_array[$k] = $new_array[$k][0];
}
查看 array_unique()
and array_merge()
。可能有更快的方法来完成此操作,但这是可行的。
您可以遍历 $og 数组并创建新数组,如下所示:
$new_array = array();
foreach($og as $parr=>$carr) {
foreach($carr as $key=>$value) {
if(!array_key_exists($key,$new_array)) {
$new_array[$key] = $value;
}else if(!in_array($value,$new_array)) {
if(is_array($new_array[$key])) {
array_push($new_array[$key],$value);
} else {
$currentVal = $new_array[$key];
$new_array[$key] = array($key=>$currentVal);
array_push($new_array[$key],$value);
}
}
}
}