Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP将二维数组展平为一维数组_Php_Arrays - Fatal编程技术网

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版或者其他地方改的。妈的,也许我又错了。我知道它发生在物体上。挺烦人的。