很难解释,但我会尽力而为。
在html中,得到了一行A B C D E.它们不在数组中。
现在有另一个数组Num[]={1,2,3,4,5,6,7,8,9}
。
想象 A = 1,B = 2,C = 3,D = 4,E = 5,0 = 6,0 = 7,0 = 8,0 = 9.
现在,我使用复选框检查项目B,C,E并形成一个数组check[]={B,C,E}
。
问题是:如何知道新数组检查[0] = 2,检查[1] = 3,检查[2] = 5?
对不起,我不能解释清楚,对我来说很复杂。(没有提供代码,因为它太长了)
答案 0 :(得分:2)
使用匹配两个数组的array_intersect()
(第一个和您想要查找的值的数组)为您提供一个数组,其中只包含这些项和第一个数组中的键。然后,您可以使用array_intersect_key()
从第二个数组中提取项目,并使用第一步中提取的键。
$a1 = ['A', 'B', 'C', 'D', 'E'];
$a2 = [1,2,3,4,5];
$a3 = ['A', 'D'];
$a4 = array_intersect_key($a2, array_intersect($a1, $a3));
print_r($a4);
哪个输出...... 阵列
(
[0] => 1
[3] => 4
)
如果您希望按键顺序,则可以使用array_values()
。
$a4 = array_values(array_intersect_key($a2, array_intersect($a1, $a3)));
答案 1 :(得分:1)
尝试使用array_map
$abc = array('A', 'B', 'C', 'D', 'E');
$num = array(1, 2, 3, 4, 5);
$newAbc = array('A', 'D');
$newNum = array_map(function($element) use($abc, $num) {
return $num[array_search($element, $abc)];
}, $newAbc);
// Outputs: 1, 4
print_r($newNum);
array_intersect解决方案也非常干净:)
答案 2 :(得分:0)
一个简单的解决方案是地图,将内容ABC
映射到Num
。
$abc = ['A', 'B', 'C', 'D', 'E'];
$num = [1, 2, 3, 4, 5];
$map = [];
foreach ($abc as $index => $val) {
$map[$val] = $num[$index];
}
$x = ['A', 'D'];
foreach ($x as $index => $val) {
echo "x[$index] = {$map[$val]}\n";
}
如果您只对一个元素执行此操作,您还可以跳过地图创建部分并使用array_search
;
echo $num[array_search('A', $abc)];
答案 3 :(得分:0)
<?php
$chars = ['A', 'B' , 'C' , 'D' , 'E'];
$ints = [ 1 , 2 , 3 , 4 , 5];
$given = ['A', 'D'];
$require = [1, 4];
结合并交叉:
$ints_chars = array_combine($ints, $chars);
var_export($ints_chars);
$result = array_keys(array_intersect($ints_chars, $given));
var_dump($result === $require);
输出:
array (
1 => 'A',
2 => 'B',
3 => 'C',
4 => 'D',
5 => 'E',
)bool(true)
使用地图:
$result = [];
$chars_ints = array_combine($chars, $ints);
foreach($given as $char)
$result[] = $chars_ints[$char];
var_dump($result === $require);
输出:
bool(true)
使用地图,但请注意您的号码范围只是一个转移的索引:
$result = [];
$chars_flip = array_flip($chars);
foreach($given as $char)
$result[] = $chars_flip[$char] + 1;
var_dump($result === $require);
输出:
bool(true)
最后通过移动和改变原始数组:
array_unshift($chars, null);
$result = array_keys(array_intersect($chars, $given));
var_dump($result === $require);
输出:
bool(true)