2

在发现数组的最终用途时,我感觉自己有点过头了。

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

目标是将第一个数组的键与第二个数组中的值匹配,但仍然维护(并显示)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

4 回答 4

1

你的问题有点不清楚,但我认为这就是你要找的:

foreach( $array2 as $key)
{
    $count = ( isset( $array1[ $key ]) ? $array1[ $key ] : 0);
    echo $key . ' has ' . $count . ' files.';
}
于 2012-05-29T22:33:15.860 回答
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 翻转键和值。然后键可以相交。

于 2012-05-29T22:36:43.233 回答
0

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

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

这应该获取array1 的KEYS 并将其插入到您的array2[] 中。

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

于 2012-05-29T22:33:33.403 回答
0

这应该打印出您需要的内容:

foreach($array2 as $key=>$val) {
     echo $val;
     foreach($array1 as $key2 => $val2){
         if($key == $val2){
             echo $val2;
         }
     }
     echo '\n'; // new line
 }
于 2012-05-29T22:38:28.607 回答