如何将新数组与原始数组匹配

时间:2018-06-12 06:57:53

标签: php html arrays

很难解释,但我会尽力而为。

在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?

对不起,我不能解释清楚,对我来说很复杂。(没有提供代码,因为它太长了)

4 个答案:

答案 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)