2014-10-03 64 views
0

我有一个像这样设置的数组数组。总共有10个数组,但我只显示前2个。第二列有一个介于1-10之间的唯一ID(每个只使用一次)。将项目添加到基于ID的数组数组

Array 
(
    [0] => Array 
     (
      [0] => User1 
      [1] => 5 
     ) 

    [1] => Array 
     (
      [0] => User2 
      [1] => 3 
     ) 
) 

我有阵列的另一个数组:

Array 
(
    [0] => Array 
     (
      [0] => 3 
      [1] => 10.00 
     ) 

    [1] => Array 
     (
      [0] => 5 
      [1] => 47.00 
     ) 
) 

其中第一列是id和第2栏是我要添加到所述第一阵列值。

每个id(1-10)仅被使用一次。我会如何去添加第2列到匹配ID#的数组#1的第二列?

回答

2

这里有很多方法可以做到这:)这是其中的一种,优化搜索第二阵列和走在第一个:

Live example

<? 
$first_array[0][] = 'User1'; 
$first_array[0][] = 5; 
$first_array[1][] = 'User2'; 
$first_array[1][] = 3; 

$secnd_array[0][] = 3; 
$secnd_array[0][] = 10.00; 
$secnd_array[1][] = 5; 
$secnd_array[1][] = 47.00; 

// Make the user_id the key of the array 
foreach ($secnd_array as $sca) { 
    $searchable_second_array[ $sca[0] ] = $sca[1]; 
} 
// Modify the original array 
array_walk($first_array, function(&$a) use ($searchable_second_array) { 
    // Here we find the second element of the first array in the modified second array :p 
    $a[] = $searchable_second_array[ $a[1] ]; 
}); 

// print_r($first_array); 
1

假设0将始终是阵列的关键字,并且1将始终是您想要添加的值,但只需一个简单的foreach循环即可。

哪里$initial为您提供的第一阵列和$add是第二:

<?php 

$initial = array(array("User1", 5), 
    array("User2", 3)); 

$add = array(
    array(0, 10.00), 
    array(1, 47.00)); 

foreach ($add as $item) { 
    if (isset($initial[$item[0]])) { 
     $initial[$item[0]][] = $item[1]; 
    } 
} 

printf("<pre>%s</pre>", print_r($arr1[$item[0]], true)); 
+0

不应该是:'的printf( “

%s
” 的print_r($初始[$项目[0],真) );'?而这只会返回一个元素 – 2014-10-03 20:15:38

1

我做不知道如果我得到你的权利,但我想出了一个解决方案XD

<?php 
$array_1 = array(
    0 => array(
     0 => 'ID1', 
     1 => 5 
    ), 
    1 => array(
     0 => 'ID2', 
     1 => 3 
    ) 
); 

$array_2 = array(
    0 => array(
     0 => 3, 
     1 => 10.00 
    ), 
    1 => array(
     0 => 5, 
     1 => 47.00 
    ) 
); 


foreach($array_1 as $key_1 => $arr_1){ 
    foreach($array_2 as $key_2 => $arr_2){ 
    if($arr_2[0] == $arr_1[1]){ 
     $array_1[$key_1][2] = $arr_2[1]; 
    } 
    } 
} 

var_dump($array_1); 

?> 

演示:https://eval.in/201648

简短的版本是这样的:

<?php 
$array_1 = array(array('ID1',5),array('ID2',3)); 

$array_2 = array(array(3,10.00),array(5,47.00)); 


foreach($array_1 as $key => $arr_1){ 
    foreach($array_2 as$arr_2){ 
    if($arr_2[0] == $arr_1[1]){ 
     $array_1[$key][2] = $arr_2[1]; 
    } 
    } 
} 

var_dump($array_1); 

?> 

演示:https://eval.in/201649

希望帮助:)

1

一个快速和肮脏方式只是向您展示的更多的自我解释的方式来做到这一点:)一个

$users = array(
    0 => array(
     0 => 'User1', 
     1 => 123 
    ), 
    1 => array(
     0 => 'User2', 
     1 => 456 
    ) 
); 

$items = array(
    0 => array(
     0 => 123, 
     1 => 'Stuff 1' 
    ), 
    1 => array(
     0 => 456, 
     1 => 'Stuff 2' 
    ) 
); 

foreach($items as $item){ 
    foreach($users as $key => $user){ 
     if($item[0] == $user[1]) 
      array_push($users[$key], $item[1]); 
    } 
}