如何将PHP多维关联数组转换为更简单的索引数组

时间:2017-09-01 11:26:29

标签: php arrays multidimensional-array

我有一个庞大的多维关联数组,我需要简化它。以下是数据示例:

  

数组([0] =>数组([sku] => 283085)[1] =>数组([sku] =>   283119)[2] =>数组([sku] => 283127)[3] =>数组([sku] =>   283168)[4] =>数组([sku] => 283184)[5] =>数组([sku] =>   283200)[6] =>数组([sku] => 283234)[7] =>数组([sku] =>   283275)[8] =>数组([sku] => 283309)[9] =>数组([sku] =>   283382)[10] =>数组([sku] => 283531)[11] =>数组([sku] =>   283549)[12] =>数组([sku] => 283556)[13] =>数组([sku] =>   283564)[14] =>数组([sku] => 283598)[15] =>数组([sku] =>   507813)[16] =>数组([sku] => 507814)[17] =>数组([sku] =>   507821)[18] =>数组([sku] => 507823)[19] =>数组([sku] =>   507828)[20] =>数组([sku] => 507829)[21] =>数组([sku] =>   507830)[22] =>数组([sku] => 507832)[23] =>数组([sku] =>   507833)[24] =>数组([sku] => 507836)[25] =>数组([sku] =>   508019)[26] =>数组([sku] => 508053)[27] =>数组([sku] =>   3636)[28] =>数组([sku] => 350138)[29] =>数组([sku] =>   350139)[30] =>数组([sku] => 311144)[31] =>数组([sku] =>   311145)[32] =>数组([sku] => 311147)[33] =>数组([sku] =>   311148)[34] =>数组([sku] => 311150)[35] =>数组([sku] =>   311151)[36] =>数组([sku] => 311153)[37] =>数组([sku] =>   311154)[38] =>数组([sku] => 311156)[39] =>数组([sku] =>   311157)[40] =>数组([sku] => 311159)[41] =>数组([sku] =>   311160)[42] =>数组([sku] => 311161)[43] =>数组([sku] =>   311162)[44] =>数组([sku] => 311164)[45] =>数组([sku] =>   311165)[46] =>数组([sku] = ......

我想返回一个最小的索引数组,其中任何键的值都匹配“sku” - 无论它们在数组嵌套中的位置都无关紧要。

最终结果应该是这样的,因为我有一个预期一系列sku数据的函数:

数组(283085,283119,283119,...)

什么PHP数组函数最好能达到上述目的?目前我在foreach循环中使用array_push来填充索引,但我觉得我应该能够以某种方式过滤值。

示例:

$result = $connection->fetchAll($sql);

$skus = $result;

$simpleSkuArray=array();

foreach ($skus as $sku)
{
    array_push($simpleSkuArray, $sku['sku']);
}

myFunction($simpleSkuArray);

3 个答案:

答案 0 :(得分:3)

简单使用array_column()函数返回输入数组

中单个列的值
$new_arr = array_column($array,'sku');
print_r($new_arr);

答案 1 :(得分:2)

使用 array_map() array_column()

// (PHP 4 >= 4.0.6, PHP 5, PHP 7)
print_r(array_map(function($a){return $a['sku'];}, $array));

// (PHP 5 >= 5.5.0, PHP 7)
print_r(array_column($array,'sku'));  

你的新数组将是

$new_array = array_map(function($a){return $a['sku'];}, $array);

$new_array = array_column($array,'sku');

答案 2 :(得分:0)

有许多数组函数可能有所帮助,但可读性受损。为什么不这样做:

$simpleArray = [];
foreach ($complicatedArray as $skuArray) {
  $simpleArray[] = $skuArray['sku'];
}

不尽可能短,但可理解。它甚至可能执行得稍快,但差异将是最小的。

好的,我必须承认array_column()是一个非常好的解决方案,而且很可能更快。