2014-02-05 5 views
0

У меня есть две матрицы $ array1 и $ array2 с данными, как показывают:Замена значения одного массива со значением другого

$ Array1:

Array 
    ( 
    [0] => Array 
     ( 
      [id] => 222 
      [issubtask] => true 
     ) 
    [1] => Array 
     ( 
      [id] => 444 
      [issubtask] => false 
     ) 
) 

$ array2:

Array 
    ( 
    [0] => Array 
    ( 
     [id] => 111 
     [name] => Mark 
     [isselected] => false 
     [issubtask] => false 
    ) 
    [1] => Array 
    ( 
     [id] => 222 
     [name] => Tony 
     [isselected] => false 
     [issubtask] => false 
    ) 
    [2] => Array 
    ( 
     [id] => 333 
     [name] => Jack 
     [isselected] => false 
     [issubtask] => false 
    ) 
    [3] => Array 
    ( 
     [id] => 444 
     [name] => Nick 
     [isselected] => false 
     [issubtask] => false 
    ) 
) 

Все, что я хочу сделать, это проверить соответствие «id» в $ array2 из $ array1, а затем заменить значение «issubtask» для $ array2 для этого «id» со значением «issubtask» в $ array1.

Я попытался это, но значения $ array2 не изменились:

foreach ($array1 as $val1) { 
    foreach ($array2 as $val2) { 
     // Checking whether IDs match 
     if ($val2['id'] == $val1['id']) { 
      $val2['isselected'] = "true"; 
      $val2['issubtask'] = $value1['issubtask']; 
     } 
    } 
} 
print_r($array2); 

Я ожидаю ниже результата, но я получаю значения $ array2, как это было раньше.

Результат $ array2:

Array 
( 
[0] => Array 
    ( 
     [id] => 111 
     [name] => Mark 
     [isselected] => false 
     [issubtask] => false 
    ) 
[1] => Array 
    ( 
     [id] => 222 
     [name] => Tony 
     [isselected] => true 
     [issubtask] => true 
    ) 
[2] => Array 
    ( 
     [id] => 333 
     [name] => Jack 
     [isselected] => false 
     [issubtask] => false 
    ) 
[3] => Array 
    ( 
     [id] => 444 
     [name] => Nick 
     [isselected] => true 
     [issubtask] => false 
    ) 
) 

Я не уверен ли я делаю правильно. Буду признателен за любую оказанную помощь.
Спасибо

ответ

2

Вы меняете локальное значение var, а не тот, который действительно хранится в вашем массиве. Когда вы получили это:

foreach ($array2 as $key2 => $val2) { 

     // This is wrong : $val2 is a local value only in the foreach 
     $val2['isselected'] = "true"; 

     // This is ok, you really change the value in the array 
     $array2[$key2]['isselected'] = true ; 
    } 

Вот ответ на вашу проблему. Будьте осторожны, чтобы использовать истину, а не «истину».

foreach ($array1 as $field1) 
{ 
    foreach ($array2 as $key2 => $field2) // Note that $field2 is just a local value in this loop 
    { 
     if ($field2['id'] == $field1['id']) // Same ID for each field, and field1 has issubtask 
     { 
      // You have to change the value contained in $array2[1][222], not the value stored in $field2[issubtask] because this is a local value 
      $array2[$key2]['issubtask'] = $field1['issubtask'] ; // Here you have to call the "full path" of array2[$key2] 
      $array2[$key2]['isselected'] = true ; 
     } 
    } 
} 
+0

я ценю ваш описательный ответ .. спасибо @Pierre :) – Harshrossi

1

Заменить непосредственно $ array2 not $ val2.

foreach ($array1 as $val1) { 
    foreach ($array2 as $k => $v) { 
     // Checking whether IDs match 
     if ($v['id'] == $val1['id']) { 
      $array2[$k]['isselected'] = "true"; 
      $array2[$k]['issubtask'] = $val1['issubtask']; 
     } 
    } 
} 
print_r($array2); 
+0

Благодаря @Mario, это помогло :) – Harshrossi

Смежные вопросы