数组与键上的值匹配

时间:2012-05-29 22:26:48

标签: php arrays multidimensional-array

在发现数组的最终用法的同时,我感觉自己已经过去了。

我有两个数组,第一个有主键,值是附加到该键的文件数。

目标是将第一个数组的键与第二个数组中的值匹配,但仍然维护(并显示)Array-1的(值)计数 - 但仅限于第二个数组中的值。

似乎有些模糊,但这里是阵列。第二个具有应与第一个中的键匹配的值。 (我的问题是,我每次尝试都会丢失数组1的值。)

希望你能帮我解决这个问题。

(工作比赛的关键是:125,2051& 2214

数组1:

Array ( 
    [6960] => 3 
    [2214] => 4 
    [2051] => 4 
    [6944] => 2 
    [6938] => 4 
    [1823] => 1 
    [766] => 6 
    [3993] => 4 
    [5896] => 6 
    [6927] => 2 
    [4220] => 3 
    [77] => 3 
    [83] => 1 
    [125] => 2 
    [6618] => 2 
    [196] => 1
    [4072] => 12
    [3718] => 1
    [5918] => 1
    [3388] => 10
    [4500] => 13
    [5968] => 2
    [3000] => 2
    [942] => 1
    [4246] => 8
    [5868] => 2
    [6394] => 3
    [1168] => 1
    [2163] => 1
    [1827] => 2
    [2071] => 8
    [4597] => 1
    [1702] => 7 
)

数组2:

Array ( 

    [0] => 1024
    [1] => 1076
    [2] => 111
    [3] => 124
    [4] => 125
    [5] => 1301
    [6] => 1409
    [7] => 2051
    [8] => 2214
    [9] => 2636
    [10] => 3246
    [11] => 4838
    [12] => 6946
    [13] => 6955
    [14] => 6961
    [15] => 73
    [16] => 74
    [17] => 8
)

4 个答案:

答案 0 :(得分:1)

您的问题有点不清楚,但我认为这正是您所寻找的:

foreach( $array2 as $key)
{
    $count = ( isset( $array1[ $key ]) ? $array1[ $key ] : 0);
    echo $key . ' has ' . $count . ' files.';
}

答案 1 :(得分:1)

这样做:

<?php

$arr1 = array(1 => 1000, 500 => 1111, 1000 => 5000, 5000 => 5555);
$arr2 = array(1, 5000);

print_r(array_intersect_key($arr1, array_flip($arr2)));

输出:

(
    [1] => 1000
    [5000] => 5555
)

或者,使用您的数据:

<?php

$arr1 = array(6960 => 3, 2214 => 4, 2051 => 4, 6944 => 2, 6938 => 4, 1823 => 1, 766 => 6, 3993 => 4, 5896 => 6, 6927 => 2, 4220 => 3, 77 => 3, 83 => 1, 125 => 2, 6618 => 2, 196 => 1, 4072 => 12, 3718 => 1, 5918 => 1, 3388 => 10, 4500 => 13, 5968 => 2, 3000 => 2, 942 => 1, 4246 => 8, 5868 => 2, 6394 => 3, 1168 => 1, 2163 => 1, 1827 => 2, 2071 => 8, 4597 => 1, 1702 => 7);
$arr2 = array(1024, 1076, 111, 124, 125, 1301, 1409, 2051, 2214, 2636, 3246, 4838, 6946, 6955, 6961, 73, 74, 8);

print_r(array_intersect_key($arr1, array_flip($arr2)));

输出:

Array
(
    [2214] => 4
    [2051] => 4
    [125] => 2
)

array_interset_keys将按键找到数组的交集,而不是值。由于您的第二个数组是基于索引的数组(不是关联数组),我们需要首先使用array_flip翻转键和值。然后键可以相交。

答案 2 :(得分:0)

嗯......我似乎无法理解你想要暗示什么......但从我看到它的方式..如果你想将数组1的键作为数组2的值...只需执行此代码..

 foreach($array1 as $key=>$val) {
     $array2[] = $key;
 }

这应该抓住array1的KEYS并将其插入到array2 []。

希望这可以帮助你..干杯:)。

答案 3 :(得分:0)

这应该打印出你需要的东西:

foreach($array2 as $key=>$val) {
     echo $val;
     foreach($array1 as $key2 => $val2){
         if($key == $val2){
             echo $val2;
         }
     }
     echo '\n'; // new line
 }