PhP多维数组到单个数组

时间:2014-05-01 23:30:16

标签: php arrays multidimensional-array

我有一个多维数组,我想将其转换为单个数组。

原始数组是

$hos_pabsl = array(
    0 =>
    array(
        'tile_id' => '1',
        'tile_type' => '4',
        'title' => 'Introduction',
        'topicNum' => '1',
        'topicTitle' => 'Introduction',
        'subNum' => NULL,
    ),
    1 =>
    array(
        'tile_id' => '2',
        'tile_type' => '9',
        'title' => 'Beer',
        'topicNum' => '2',
        'topicTitle' => 'Beer',
        'subNum' => NULL,
    ),
    2 =>
    array(
        'tile_id' => '3',
        'tile_type' => '4',
        'title' => 'Methods of Brewing',
        'topicNum' => '2',
        'topicTitle' => 'Beer',
        'subNum' => NULL,
    ),
    3 =>
    array(
        'tile_id' => '4',
        'tile_type' => '11',
        'title' => 'Beer Styles',
        'topicNum' => '2',
        'topicTitle' => 'Beer',
        'subNum' => '',
    ),
);

我想将此数组转换为名为'tile_id' , 'tile_type' , ...的单个数组。

目前我正在按照以下方式进行!

$tile_id = [];
$tile_type = [];
$title = [];
$topicNum = [];
$topicTitle= [];
$subNum = [];

foreach($hos_pabsl as $val){
    array_push($tile_id, $val['tile_id']);
    array_push($tile_type, $val['tile_type']);
    array_push($title, $val['title']);
    array_push($topicNum, $val['topicNum']);
    array_push($topicTitle, $val['topicTitle']);
    array_push($subNum, $val['subNum']);
}

问题1:这是执行此操作的最有效方式(就速度而言)吗?

问题2:
$hos_pabsl数组的索引(或多个键)始终是顺序的。但是,我的问题是对于第二个数组(在2级OR $ hos_pabsl [0]),索引(或键)可能会增加或减少。
例如。所有数组中只有2个项目'tile_id'和& '标题'。或者可能有一个额外的项目'描述'。那么如何才能使上述操作动态化?

为了解决问题2,我考虑使用array_keys首先提取名称$names = array_keys($hos_pabsl[0]),然后使用这些名称作为数组名称,如${$names[0]} =[]。我再次认为这不是正确/有效的方法。



对此的任何指导都将非常感激。

3 个答案:

答案 0 :(得分:2)

如果您运行的是PHP 5.5,则可以使用array_column()

$tile_id = array_column($hos_pabsl, 'tile_id');
$tile_type = array_column($hos_pabsl, 'tile_type');
... etc

对于早于5.5的PHP版本,您可以使用array_map()

$tile_id = array_map(
    function ($value) { return $value['tile_id']; }, $hos_pabsl
);
$tile_type = array_map(
    function ($value) { return $value['tile_type']; }, $hos_pabsl
);
... etc

答案 1 :(得分:1)

因为我已经输入了Mark Ba​​ker的回答:

foreach(array_keys(reset($hos_pabsl)) as $key) {
    $$key = array_column($hos_pabsl, $key);
}

答案 2 :(得分:-1)

就性能而言,如果使用for而不是foreach的数组是巨大的,那么它将是faster

$tile_id = array();
$tile_type = array();
$title = array();
$topicNum = array();
$topicTitle = array();
$subNum = array();

$hos_pabsl_sz = count($hos_pabsl);
for ($i = 0; $i < $hos_pabsl_sz; ++$i ) {
    $tile_id[$i] = $hos_pabsl[$i]['tile_id'];
    $tile_type[$i] = $hos_pabsl[$i]['tile_type'];
    $title[$i] = $hos_pabsl[$i]['title'];
    $topicNum[$i] = $hos_pabsl[$i]['topicNum'];
    $topicTitle[$i] = $hos_pabsl[$i]['topicTitle'];
    $subNum[$i] = $hos_pabsl[$i]['subNum'];
}