Php 多维数组中的数组值

Php 多维数组中的数组值,php,arrays,Php,Arrays,我有两个数组 他们看起来像 $a1 = array( array('num' => 1, 'name' => 'one'), array('num' => 2, 'name' => 'two'), array('num' => 3, 'name' => 'three'), array('num' => 4, 'name' => 'four'), array('num' => 5, 'name' => 'five')

我有两个数组

他们看起来像

$a1 = array(
  array('num' => 1, 'name' => 'one'),
  array('num' => 2, 'name' => 'two'),
  array('num' => 3, 'name' => 'three'),
  array('num' => 4, 'name' => 'four'),
  array('num' => 5, 'name' => 'five')
)

$a2 = array(3,4,5,6,7,8);
我想得到一个数组

$a3 = array(3,4,5);
所以基本上,
$a1[$i]['num']
位于
$a2

我知道我能做到

$a3 = array();

foreach($a1 as $num)
 if(array_search($num['num'], $a2))
   $a3[] = $num['num'];
但这似乎有很多不需要的迭代

有更好的办法吗


Ah Snap…
我刚刚意识到我问错了这个问题,我想得到一个数组

$a3 array(
  array('num' => 3, 'name' => 'three'),
  array('num' => 4, 'name' => 'four'),
  array('num' => 5, 'name' => 'five')
)

您可以从
$a1
中提取相关信息(
'num'
项):

$a1_bis = array();
foreach ($a1 as $a) {
    $a1_bis[] = $a['num'];
}
然后,使用查找
$a1_bis
$a2
中的内容:

$result = array_intersect($a1_bis, $a2);
var_dump($result);
这会让你:

array
  2 => int 3
  3 => int 4
  4 => int 5

使用此解决方案:

  • 您只能通过
    $a1
    一次
  • <> LI>您相信PHP使用一个好的算法来找到两个数组之间的交集(和/或考虑在C中开发的函数可能会比在纯PHP中的任何等效代码更快)


在评论后编辑:好吧,考虑到你想要的结果,现在,我会选择另一种方法

首先,我将使用翻转
$a2
数组,以便更快地访问其元素(通过键访问要比查找值快得多):

然后,我将使用对
$a1
应用一个过滤器,保留
num
位于
$a2\u哈希
翻转数组中的项目:

$result = array_filter($a1, function ($item) use ($a2_hash) {
    if (isset($a2_hash[ $item['num'] ])) {
        return true;
    }
    return false;
});
var_dump($result);
注意:我使用了一个匿名函数,它只在PHP>=5.3时存在;如果您使用的是PHP<5.3,则可以重新处理此代码以抑制闭包

这样,我就得到了您想要的阵列:

array
  2 => 
    array
      'num' => int 3
      'name' => string 'three' (length=5)
  3 => 
    array
      'num' => int 4
      'name' => string 'four' (length=4)
  4 => 
    array
      'num' => int 5
      'name' => string 'five' (length=4)
请注意,这些键与任何有用的东西都不对应——如果要删除它们,只需使用该
$result
上的函数即可:

$final_result = array_values($result);

但这可能不是必需的:-)

嗨,帕斯卡,谢谢你,你能看一下我的编辑吗facepalm@Hailwook考虑到您想要的结果,我用另一种方法编辑了我的答案,使事情变得更简单:-)
$final_result = array_values($result);