我有一个包含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。
有人可以提供一些帮助。我知道,已有相当多的文献,但它们都提供了与上述无法解决的解决方案非常类似的解决方案。
非常感谢您抽出的时间。
答案 0 :(得分: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;
}
我没有测试过,但它应该给你一些思考。
答案 1 :(得分:1)
试试这个。循环第二个数组并使用array2的值作为array1的索引
从array1中提取值foreach ( $array2 as $arr2 ){
$temp[]= $array[ $arr2 ];
}
return $temp;
答案 2 :(得分: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;
答案 3 :(得分:0)
不幸的是,array_slice()
将忽略基于键/索引的数组之间的任何关联。 array_slice()
使用offset
值进行操作;这就是为什么它是错误的工具。
array_intersect_key()
是使用其他数组键过滤数组的合适调用。
代码:(Demo)
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()
来同步订单,以便轻松直观地比较得分。