将由单元素数组组成的数组转换为一维数组。

35

我有这样一个包含单元素数组的数组:

$array = [[88868], [88867], [88869], [88870]];

我需要将这个转换为一维数组。

期望输出:

[88868, 88867, 88869, 88870]

是否有任何内置/本地的PHP功能可以用于这个数组转换?

8个回答

116

对于您的有限用例,这个代码就可以实现:

$oneDimensionalArray = array_map('current', $twoDimensionalArray);

当子数组中有许多条目时,可以将其更加通用化:

$oneDimensionalArray = call_user_func_array('array_merge', $twoDimensionalArray);

1
我不理解“current”。我在PHP文档中看到了可调用的$callback,但是在示例中没有看到函数或代码。我希望能够提供一些示例。 - abkrim
4
@abkrim current() 函数返回数组中当前元素的值。例如:$fruits = array("banana", "apple", "orange"); echo current($fruits) //将返回"banana",因为当前指针位于索引0上,即香蕉。 - Rafique Mohammed
用更简洁的方式,正如@Amir建议的那样:array_merge(...$this->highlights)是严格等效的。 - Yonn Trimoreau

21

4

尝试:

$new_array = array();
foreach($big_array as $array)
{
    foreach($array as $val)
    {
        array_push($new_array, $val);
    }    
}

print_r($new_array);

3
$oneDim = array();
foreach($twoDim as $i) {
  $oneDim[] = $i[0];
}

1

对于二维数组,这同样适用:

array_merge(...$twoDimensionalArray)


1

好的。

$values = array(array(88868), array(88867), array(88869), array(88870));
foreach ($values as &$value) $value = $value[0];

http://codepad.org/f9KjbCCb


0

虽然之前用于关闭此页面的页面上的一些答案确实适用于这个问题(例如array_merge(...$array)),但对于这个具体的问题,有一些技巧是不适合放在其他页面的,因为输入数据结构不同。

这里的示例数据结构是由单元素索引数组组成的数组。

var_export(array_column($array, 0));

这个问题需要的就是这些。


如果你碰到一个愚蠢的面试要求你不使用任何函数调用,你可以使用语言结构(foreach())和"数组解构"语法将值推入结果变量中,甚至不需要为循环编写主体。(演示)
$result = [];
foreach ($array as [$result[]]);
var_export($result);

Laravel 还有一个扁平化辅助方法:Arr::flatten()


0
foreach($array as $key => $value){
   //check that $value is not empty and an array
   if (!empty($value) && is_array($value)) {
      foreach ($value as $k => $v) {
         //pushing data to new array
         $newArray[] = $v;
      }
   }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接