0

我正在一个现有的程序中工作,该程序的功能可以带来比我需要的更多的结果。我试图不重建该功能。我只需要将数组缩减到可用的大小。数组如下所示:

array (size=2)
0 => 
array (size=24)
  'event' => '2013-07-22' 
  'endDate' => '0000-00-00' 
  'startTime' => '09:00:00' 
  'endTime' => '09:20:00' 
  'duration' => '1200'
  'recurrtype' => '0' 
  'recurrspec' => 
  'recurrfreq' => '0' 
  'catid' => '9' 
  'eid' => '13714'
  'title' => 'Physical' 
  'hometext' => 'CALLING PT # NOT IN SERV.' 
  'fname' => 'John' 
  'mname' => '' 
  'lname' => 'Bass Jr' 
  'id' => '993' 
  'pubpid' => '993' 
  'phone_home' => '555-111-2222'
  'phone_cell' => ''
  'ufname' => 'Dr' 
  'umname' => 'B'
  'ulname' => 'No'
  'uprovider_id' => '2' 
  'catname' => 'Physical'
1 => 
array (size=24)
  'event' => '2013-07-22' 
  'endDate' => '0000-00-00' 
  'startTime' => '09:00:00' 
  'endTime' => '09:20:00' 
  'duration' => '1200'
  'recurrtype' => '0' 
  'recurrspec' => 
  'recurrfreq' => '0' 
  'catid' => '9' 
  'eid' => '13717'
  'title' => 'Physical' 
  'hometext' => '' 
  'fname' => 'James' 
  'mname' => '' 
  'lname' => 'Lenny Jr' 
  'id' => '993' 
  'pubpid' => '993' 
  'phone_home' => '555-111-2222'
  'phone_cell' => ''
  'ufname' => 'Dr' 
  'umname' => 'B'
  'ulname' => 'No'
  'uprovider_id' => '2' 
  'catname' => 'Physical'

我需要的所需数组是这样的:

 array (size=2)
 0 =>
  'event' => '2013-07-22' 
  'startTime' => '09:00:00' 
  'fname' => 'John' 
  'lname' => 'Bass Jr' 
  'phone_home' => '555-111-2222'
 1 =>
  'event' => '2013-07-22' 
  'startTime' => '09:00:00' 
  'fname' => 'James' 
  'lname' => 'Lenny Jr' 
  'phone_home' => '555-111-2222'

我已经在 PHP 手册中搜索了一个可以返回这个数组的函数,但只是看不到如何过滤掉我不需要的键。提前致谢。

4

4 回答 4

0

你可以使用函数:array_column。但需要你的 php >= 5.5.0

于 2014-03-27T00:44:03.940 回答
0

在带头给我之后。我尝试了一些非常简单的东西。我知道我需要一个 foreach 循环。所以我以这种方式构建了循环:

$parentArray = getFunction();
  foreach ($parentArray as $childArray) {

       $desired_array[] = array (
            "Fname" => $childArray['fname'],
            "Lname" => $childArray['lname'],
            "Phone" => $childArray['phone_home'],
            "Date" => $childArray['event'],
            "Time" => $childArray['startTime']                                
          );

    }

似乎 foreach 循环只返回了我在 $childArray 中指定的值,而忽略了所有其余的值。

于 2013-07-30T04:15:26.007 回答
0

创建您自己的函数,例如:

function get_desired_array($theArray)
{
   $desired_keys = array( 'event','startTime', 'fname', 'lname','phone_home');
   $desired_array = array();

   foreach ($theArray as $childArray)
   {
      foreach ($childArray as $k => $v)
      {
          if(in_array($k, $desired_keys))
          {
             $desired_array[$k] = $v;
          }
      }
   }

   return $desired_array;
 }

并运行函数:

$desired_array = get_desired_array($theArray);

//you can now:
var_dump($desired_array);
于 2013-07-30T00:55:38.540 回答
0

PHP中有一个特殊的功能:array_intersect_key

这是代码:

$originArray = array(
  // your original array here
  // 0 => array(...)
  // 1 => array(...)
  // ...
  // n => array(...)
);
$desiredKeys = array_flip(array('event', 'startTime', 'fname', 'lname', 'phone_home'));
foreach ($originArray as $index => $subArray)
{
    $originArray[$index] = array_intersect_key($subArray, $desiredKeys);
}

PS。我使用 array_flip 将值转换为键,因为 array_intersect_key 确实通过键进行比较。定义 $desiredKeys 的另一种方法:

$desiredKeys = array('event'=>1, 'startTime'=>1, 'fname'=>1, 'lname'=>1, 'phone_home'=>1);
于 2014-03-27T01:10:39.003 回答