从多维数组中筛选出键

时间:2011-09-14 11:28:02

标签: php

我有以下数组:

array(2) {
  [0] => array(4) {
    ["presentation_id"] => int(143)
    ["user_id"] => int(2)
    ["session_id"] => int(46)
    ["submission_id"] => int(190)
}
[1] => array(4) {
    ["presentation_id"] => int(144)
    ["user_id"] => int(2)
    ["session_id"] => int(46)
    ["submission_id"] => int(190)
}

我想要的是一个只包含该数组的某些键的数组,例如:

array(2) {
  [0] => array(4) {
    ["presentation_id"] => int(143)
    ["user_id"] => int(2)
}
[1] => array(4) {
    ["presentation_id"] => int(144)
    ["user_id"] => int(2)
}

有什么想法吗?

3 个答案:

答案 0 :(得分:2)

$array = array_map(function ($arr) {
    return array_intersect_key($arr, array_flip(array('presentation_id', 'user_id')));
}, $array);

需要注意的是,此语法需要PHP 5.3 +。

对于其他版本:

foreach ($array as &$arr) {
    $arr = array_intersect_key($arr, array_flip(array('presentation_id', 'user_id')));
}

如果您肯定想将数组限制为某些元素,我建议使用unset不需要的键(如其他人所建议的那样)。如果您以后向阵列添加更多元素,则无需更新此代码,但您必须unset多个您可能不需要的元素。

答案 1 :(得分:1)

尝试:

$newArray = array_map(function ($innerArray) {
  unset($innerArray['session_id'], $innerArray['submission_id'] /*, and so on*/);
  return $innerArray;
}, $oldArray);

答案 2 :(得分:0)

请使用foreach并取消设置要删除的密钥。像

foreach($data as $key=> $row){
    unset[$key] ["session_id"] ;
}