PHP将二维数组展平为一维数组
如何将二维数组展平为一维数组 例如:PHP将二维数组展平为一维数组,php,arrays,Php,Arrays,如何将二维数组展平为一维数组 例如: Array ( [1] => Array ( [key] => val [key2] => val2 ) ) 变成: Array ( [key] => val [key2] => val2 ) 这也将处理键,它不是所有数组都必须以0或1或任何形式开始 这也会处理键,并非所有数组都必须以0或1或任何形式开始。例如: $myarr
Array
(
[1] => Array
(
[key] => val
[key2] => val2
)
)
变成:
Array
(
[key] => val
[key2] => val2
)
这也将处理键,它不是所有数组都必须以0或1或任何形式开始
这也会处理键,并非所有数组都必须以0或1或任何形式开始。例如:
$myarray = array_shift($myarray);
或
但是:
$myarray = array_shift($myarray);
是否可以有多个子阵列
如果是:这个子数组是否有同名的键
如果是:复制品会发生什么情况?全部重命名?除了一个,什么都放弃
如你所见,你必须提供更多的信息。这个问题真的不清楚。举个例子:
$myarray = array_shift($myarray);
或
但是:
$myarray = array_shift($myarray);
是否可以有多个子阵列
如果是:这个子数组是否有同名的键
如果是:复制品会发生什么情况?全部重命名?除了一个,什么都放弃
如你所见,你必须提供更多的信息。问题真的不清楚。一个明显的方法是在数组上使用
foreach
(最好是通过引用,以避免重复复制所有数据),然后将它们组合到一个新数组中
大概是这样的:
$b = array();
foreach($arr as &$a) $b = array_combine($b, $a);
$arr = $b;
尽管其他人指出,在您的特殊情况下,数组移位就足够了。一个明显的方法是在数组上使用
foreach
(最好是通过引用来保存对所有数据的反复复制),然后将它们组合到一个新数组中
大概是这样的:
$b = array();
foreach($arr as &$a) $b = array_combine($b, $a);
$arr = $b;
尽管其他人指出,在您的特殊情况下,数组移位就足够了。假设您的键是唯一的
$oneDArray = array();
foreach($multiDimensionalArray as $k=>$v) {
$oneDArray[$k]=$v;
}
unset($multiDimensionalArray); //If you don't want to keep it.
假设您的密钥是唯一的
$oneDArray = array();
foreach($multiDimensionalArray as $k=>$v) {
$oneDArray[$k]=$v;
}
unset($multiDimensionalArray); //If you don't want to keep it.
在这种情况下,访问
$array[1]
可能会更简单。@Archimedix:并非所有数组都以1作为第一个索引开始,因此array\u shift使其完全独立于键,只需从数组中弹出第一个元素。@Marc B,我知道,但是答案明确指出,//仅用于您的示例
,并且提到它是合适的,因此,$array[1]
同样合适。您的论点就像是说并非所有数组都存储在名为$array
的变量中,这是正确的,但希望足够明显。整个示例仅在外部数组仅由1个元素组成且因此非常具体时有效。如果您不知道第一个元素的键:$array=reset($array)代码>。无论如何,这个答案仅限于所讨论的数组,并不反映问答的一般特征。警告注释甚至已被删除。在这种情况下,访问$array[1]
可能会更简单。@Archimedix:并非所有数组都以1作为第一个索引,因此,array\u shift使其完全独立于键,只需从数组中弹出第一个元素。@Marc B,我知道,但答案明确说明了//仅用于您的示例
,并且被提到是合适的,因此$array[1]
同样合适。您的论点就像是说并非所有数组都存储在名为$array
的变量中,这是正确的,但希望足够明显。整个示例仅在外部数组仅由1个元素组成且因此非常具体时有效。如果您不知道第一个元素的键:$array=reset($array)代码>。无论如何,这个答案仅限于所讨论的数组,并不反映问答的一般特征。警告注释甚至已被删除。这些天数组会自动通过引用传递。没有理由指定它。哦,对象也是通过引用自动传递的。嗯。。。根据我的理解,foreach
文档的措辞正好相反:“除非引用数组,否则foreach操作的是指定数组的副本,而不是数组本身”。你对此有参考资料吗(没有双关语),特别是哪些版本会自动引用?嗯,那么可能是错误的,至少在foreach循环中是这样。不过,您可以出于其他目的对其进行测试。您可以执行类似于函数测试($array){$array[0]=2;}$test=array(1,2,3);测试($测试);打印(测试)代码>并且您应该得到数组(2,2,3),即使它不是通过引用传递的。即使您执行$var=$test$测试[0]=2;印刷费($var)
并且您将从$var
获得数组(2,2,3),即使您只更改了$test[0]
的值。我想他们是在5.2版或者其他地方改的。妈的,也许我又错了。我知道它发生在物体上。相当烦人。现在数组是通过引用自动传递的。没有理由指定它。哦,对象也是通过引用自动传递的。嗯。。。根据我的理解,foreach
文档的措辞正好相反:“除非引用数组,否则foreach操作的是指定数组的副本,而不是数组本身”。你对此有参考资料吗(没有双关语),特别是哪些版本会自动引用?嗯,那么可能是错误的,至少在foreach循环中是这样。不过,您可以出于其他目的对其进行测试。您可以执行类似于函数测试($array){$array[0]=2;}$test=array(1,2,3);测试($测试);打印(测试)代码>并且您应该得到数组(2,2,3),即使它不是通过引用传递的。即使您执行$var=$test$测试[0]=2;印刷费($var)
并且您将从$var
获得数组(2,2,3),即使您只更改了$test[0]
的值。我想他们是在5.2版或者其他地方改的。妈的,也许我又错了。我知道它发生在物体上。挺烦人的。