PhP多维数组到单个数组



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

原始阵列为

$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或$hos_passl[0](,索引(或键(可能会增加或减少
例如,中的所有数组可能只有2个项"tile_id"&amp标题'。OR可能有一个额外的项"description"。那么,我该如何使上述操作动态化呢

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



如能就此提供任何指导,我们将不胜感激。

如果您运行的是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

由于我已经在输入Mark Baker的答案:

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

就性能而言,如果使用for而不是foreach的数组很大,则速度会更快。

$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'];
}

相关内容

  • 没有找到相关文章

最新更新