foreach循环只重复最后一个数组值

时间:2011-11-28 15:39:38

标签: php arrays foreach

我有两个阵列。

ArrayA是数字

(ArrayA => 3, 7, 8)

ArrayB是一个关联数组

(1=>bread, 2=>banana, 3=>fruit, 4=> milk, 5=>pizza, 6=> gum, 7=>corn, 8=>lager)

我想创建第三个数组ArrayC,associative,它将ArrayA的值与ArrayB键匹配,并为ArrayA键提供相关的ArrayB值。

换句话说,从这个例子

ArrayC (3 => fruit, 7=>corn, 8=>lager)

但是我的代码只给了我

ArrayC (3 => lager, 7=>lager, 8=>lager) //last value of ArrayB

代码:

     $ArrayC = array();
     foreach ($ArrayB as $keyB => $valueB) {
          foreach ($ArrayA as $valueA) {
             if ( $valueA = $keyB) {
                   $ArrayC [$valueA] = $valueB;
             }
          }
      }
      print_r($ArrayC);

6 个答案:

答案 0 :(得分:1)

$common_keys = array_intersect($ArrayA, array_keys($ArrayB));
$arrayC = array();
foreach($common_keys as $key) {
   $arrayC[$key] = $ArrayB[$key];
}

答案 1 :(得分:1)

你只需要一个循环:

      foreach ($ArrayA as $valueA) {
         $ArrayC [$valueA] = $arrayB[$valueA];
      }

答案 2 :(得分:1)

$arrayC=Array()
foreach($arrayA as $valueA){
   $arrayC[$valueA]=$arrayB[$valueA];
}

答案 3 :(得分:0)

您正在混合使用小写/大写变量名称。您需要使用$valueB代替$ValueB

此外,在您分配的if中,而非比较。

答案 4 :(得分:0)

如果您想在不循环播放数组的情况下执行此操作,可以尝试使用array_intersect_key()array_flip()的组合

$ArrayA = array(3, 7, 8);
$ArrayB = array(1 => 'bread', 2 => 'banana', 3 => 'fruit',
            4 => 'milk', 5 => 'pizza', 6 => 'gum', 7 => 'corn',
            8 => 'lager');
$searchArray = array_flip( $ArrayA );
$results = array_intersect_key( $ArrayB, $searchArray );

var_dump( $results );

答案 5 :(得分:-1)

这是一种更好的方法:

<?php
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);

print_r($c);
?>

这会给你:

Array
(
    [green]  => avocado
    [red]    => apple
    [yellow] => banana
)