【发布时间】:2011-07-26 03:30:40
【问题描述】:
如何将二维数组展平为一维数组?
例如:
Array
(
[1] => Array
(
[key] => val
[key2] => val2
)
)
变成:
Array
(
[key] => val
[key2] => val2
)
【问题讨论】:
如何将二维数组展平为一维数组?
例如:
Array
(
[1] => Array
(
[key] => val
[key2] => val2
)
)
变成:
Array
(
[key] => val
[key2] => val2
)
【问题讨论】:
$array = array_shift($array);
这也将处理键,它不需要所有数组都以 0 或 1 或任何东西开头。
【讨论】:
$array[1] 可能会更简单。
// for your example only 并被提及是合适的,因此$array[1] 也同样合适。您的论点就像是说并非所有数组都存储在名为 $array 的变量中,这是正确的,但希望应该足够明显。整个示例仅在外部数组仅包含 1 个元素且因此具有高度特异性时才有效。
$array = reset($array);。在任何情况下,这个答案都非常仅限于所讨论的数组,并且不能反映问答的一般特征。警告说明甚至已被删除。
举个例子:
$myarray = array_shift($myarray);
或
$myarray = $myarray[1];
但是:
会不会有多个子数组?
如果是这样:这个子数组有同名的键吗?
如果是这样:重复项应该怎么办?全部重命名?除了一个之外,其他都丢掉?
如您所见,您必须提供更多相关信息。这个问题真的不清楚。
【讨论】:
一种明显的方法是foreach 覆盖数组(最好通过引用,以保存一遍又一遍地复制所有数据),然后将array_combine 放入一个新数组中。
类似这样的:
$b = array();
foreach($arr as &$a) $b = array_combine($b, $a);
$arr = $b;
尽管正如其他人指出的那样,在您的特殊情况下 array_shift 就足够了。
【讨论】:
foreach 文档的措辞恰恰相反:“除非引用了数组,否则 foreach 对指定数组的副本而不是数组本身进行操作” .你有这方面的参考吗(不是双关语),特别是哪些版本可以自动参考?
function test($array){$array[0] = 2;} $test = array(1,2,3); test($test); print_r($test); 之类的操作,即使它不是通过引用传递的,您也应该得到 array(2,2,3) 。即使您执行$var = $test; $test[0] = 2; print_r($var);,即使您只更改了$test[0] 的值,您也会从$var 获得array(2,2,3)。我认为他们在 5.2 或附近的某个地方对其进行了更改。
假设您的密钥是唯一的
$oneDArray = array();
foreach($multiDimensionalArray as $k=>$v) {
$oneDArray[$k]=$v;
}
unset($multiDimensionalArray); //If you don't want to keep it.
【讨论】:
【讨论】: