0

我有一个包含 100 个值的数组(array1)。我有另一个包含 8 个值的数组(array2)。我想从 array2 中获取值并将它们用作键并为这些键提取 array1 中的值。

array_combine 函数不起作用,因为它们的长度不同。

我努力了

function array_combine2($arr1, $arr2) {
    $count = min(count($arr1), count($arr2));
    return array_combine(array_slice($arr1, 0, $count), array_slice($arr2, 0, $count));
}

但这不起作用.....这给了我一个带有正确键的数组,但值不正确,我认为是因为它正在切片array1。

有人可以提供一些帮助。我知道,已经有大量关于这方面的文献,但它们都提供了与上述不起作用的解决方案非常相似的解决方案。

非常感谢您花费的时间。

4

4 回答 4

1

像这样的东西:

function combine($array1, $array2) {
    $array3 = array();
    foreach ($array2 as $key => $value) { //loop through all entries of array2

        //get the entry of array1 that corresponds to the value of array2's entry
        if (isset($array1[$value]) {
            $array3[$key] = $array1[$value] 
        }
    }

    return $array3;
}

我没有测试过它,但它应该给你一些思考。

于 2013-07-18T07:35:34.250 回答
1

尝试这个。循环第二个数组并使用array2的值作为array1的索引从array1中提取值

foreach ( $array2 as $arr2 ){
   $temp[]= $array[ $arr2 ];
}
return $temp;
于 2013-07-18T07:35:57.987 回答
0

你可以使用下面的代码

function array_combine2($arr1, $arr2) {
    foreach($arr2 as $val){
     $arr3[] = $arr1[$val];
     }

    return $arr3;
}

对于 inctanse,

    $arr1['x'] = 2;
$arr1['y'] = 3;
$arr1['z'] = 4;

$arr2[0] = 'x';
$arr2[1] = 'y';
$arr2[2] = 'z';

上面的函数将返回以下作为resbonse

$arr3[0] = 2;
$arr3[1] = 3;
$arr3[2] = 4;
于 2013-07-18T07:44:48.150 回答
0

不幸的是,array_slice()将忽略基于键/索引的数组之间的任何关联。 array_slice()使用offset值进行操作;这就是为什么它是不适合这项工作的工具。

array_intersect_key()是使用另一个数组的键过滤数组的合适调用。

代码:(演示

for($char='A',$score=100; $score>0; ++$char,--$score){
    $dr_img_scores1["IMG_$char"]=$score;    // generate 100 unique elements
}
//var_export($dr_img_scores1);  // uncomment to see what this looks like

// eight arbitrary elements to use as extraction keys on $array1
$dr_img_scores2=['IMG_CL'=>13,'IMG_Z'=>44,'IMG_BP'=>82,'IMG_L'=>50,
                 'IMG_CD'=>2,'IMG_X'=>91,'IMG_BM'=>7,'IMG_AV'=>0];    

var_export(array_intersect_key($dr_img_scores1,$dr_img_scores2));
// notice that $dr_img_scores1's element order is preserved

输出:

array (
  'IMG_L' => 89,
  'IMG_X' => 77,
  'IMG_Z' => 75,
  'IMG_AV' => 53,
  'IMG_BM' => 36,
  'IMG_BP' => 33,
  'IMG_CD' => 19,
  'IMG_CL' => 11,
)

注意:$dr_img_scores1无论$dr_img_scores2是否按顺序,您都可以使用ksort()它们来同步它们的顺序,以便轻松直观地比较分数。

于 2017-12-01T05:41:11.950 回答