通过匹配两个数组来分配值

时间:2012-08-07 13:26:43

标签: php

我觉得自己真的很蠢,因为我记得做过这样的事情。但现在我的脑袋是空的,这似乎看起来像一个问题。

我有两个数组。第一:

array (
  0 => 
  array (
    'id' => '1',
    'name' => 'Blizzard',
    'slug' => 'blizzard',
  ),
  1 => 
  array (
    'id' => '2',
    'name' => 'Id Software',
    'slug' => 'id-software',
  ),
  2 => 
  array (
    'id' => '3',
    'name' => 'Capcom',
    'slug' => 'capcom',
  ),
  3 => 
  array (
    'id' => '4',
    'name' => 'Maxis',
    'slug' => 'maxis',
  ),
  4 => 
  array (
    'id' => '5',
    'name' => 'Electronic Arts',
    'slug' => 'electronic-arts',
  ),
)

并且一个人:

array (
  0 => '3',
  1 => '4',
)

我想要做的是,从 secound 数组中获取值,并将其与第一个数据的值相匹配。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

当你说“按价值”时,我假设你的意思是id,在这种情况下,如果你已经知道id值比关键字少一个,你可以这样做:

foreach( $second as $id) {
    $key = $id - 1;
    $row = $first[ $key ];
    echo $row['name'];
}

否则,您必须循环/搜索特定的id

foreach( $second as $id) {
    foreach( $first as $row) {
         if( $row['id'] == $id) {
              echo $row['name']; break;
         }
    }        
}

但是,您可以使用另一个技巧来获取包含所需元素的数组是使用array_filter(),如下所示:

$second = array( 3, 4);
$keep = array_filter( $first, function( $el) use( $second) { 
    return in_array( $el['id'], $second); 
}); 

现在$keep将包含您想要的两个值的数组,您可以相应地循环它们。

答案 1 :(得分:0)

这样的东西?

$new_array = array();
foreach ( $secoundarray as $key => $value ) {
  $new_array[$key] = $firstarray[$value];
}