我有一个多维数组,我想将其转换为单个数组。
原始阵列为
$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"&标题'。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'];
}