2012-04-23 6 views
0

別の配列からキーに基づいて配列を組み合わせる:私はこのような二つの配列を結合したい

第一の配列:

array("ATTENDED"  => 1, 
      "TENTATIVE"  => 2, // 
      "REJECTED"  => 3, 
      "OUTSTANDING"  => 4, 
      "ACCEPTED"  => 6 
     ); 

第二アレイ:私はこのような結果を得たい

array (1 => 29, 
      4 => 30, 
      6 => 47 
     ); 

array ('ATTENDED' => 29, 
      'OUTSTANDING' => 30, 
      'ACCEPTED' => 47 
     ); 

2番目の配列は柔軟です。キーと値を反転することができます。

以上:

array("ATTENDED" => 29, 
     "TENTATIVE"  => 0, // 
     "REJECTED"  => 0, 
     "OUTSTANDING"  => 30, 
     "ACCEPTED"  => 47 
    ); 

私は単純な解決策が必要であることを知っています。 アイデア

+0

[array_merge](http://www.php.net/manual/en/function.array-merge.php)機能を見てください。 – Furunomoe

答えて

3
foreach ($arr1 as $k1 => $v1) { 
    $arr1[$k1] = isset($arr2[$v1]) ? $arr2[$v1] : 0; 
} 

編集 - 私もこれは本当に優れていると思いますが、多分クーラーはありませんが、これは、明示的なループをなしています。

$mapped = array_map(function($valFromArr1) use ($arr2) { 
    return isset($arr2[$valFromArr1]) ? $arr2[$valFromArr1] : 0; 
}, $arr1); 

純粋なPHP関数を使用するだけの純粋な方法はありません。

+0

+1これは最もよく、最も正しい答えです。 – Paulpro

+0

ループなしで可能ですか?ループでのみ可能な場合、0は必要ありません。最初の出力も問題ありません。 –

0
$labels = array( 
      "ATTENDED"  => 1, 
      "TENTATIVE"  => 2, 
      "REJECTED"  => 3, 
      "OUTSTANDING"  => 4, 
      "ACCEPTED"  => 6 
     ); 

    $values = array(
      1 => 29, 
      4 => 30, 
      6 => 47 
     ); 

    $results = array(); 

    foreach ($labels as $label => $id) { 
     $results[$label] = array_key_exists($id, $values) ? $values[$id] : 0; 
    } 
+0

ありがとうございます。しかし、私はループなしの解決策が必要です! –

+0

別の言語では、 'map'などを使って機能的にアプローチすることを提案しますが、PHPのサポートレベルでは、これらを使用するソリューションがやや不器用です。 –

+0

これは私が得た出力です: 配列([出席] => 1 [暫定] => 1 [拒否] => 1 [卓越] => [受諾] =>) –

関連する問題