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

Php 如何将新数组与原始数组匹配,php,html,arrays,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 现在,我使用checkbox检查项目B、C、E,并形成一个数组check[]={B、C、E} 问题是:如何知道新数组check[0]=2,check[1]=3,check[2]=5 对不起,我不能很好地解释,对我来说它很复杂。(没有提供代码,因为它太长)一

这很难解释,但我会尽力的

在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

现在,我使用checkbox检查项目B、C、E,并形成一个数组
check[]={B、C、E}

问题是:如何知道新数组check[0]=2,check[1]=3,check[2]=5


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

一个简单的解决方案是映射,它将内容
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)];

一个简单的解决方案是映射,它将内容
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)];
使用匹配两个数组(第一个数组和具有要查找的值的数组)的方法,可以得到一个仅包含这些项和第一个数组中的键的数组。然后,您可以使用从第二个数组中提取项的方法,并在第一步中提取关键帧

$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);
哪个输出。。。 排列

如果希望键按顺序排列,可以使用
array\u values()

$a4 = array_values(array_intersect_key($a2, array_intersect($a1, $a3)));
使用匹配两个数组(第一个数组和具有要查找的值的数组)的方法,可以得到一个仅包含这些项和第一个数组中的键的数组。然后,您可以使用从第二个数组中提取项的方法,并在第一步中提取关键帧

$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);
哪个输出。。。 排列

如果希望键按顺序排列,可以使用
array\u values()

$a4 = array_values(array_intersect_key($a2, array_intersect($a1, $a3)));

尝试使用
array\u 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\u intersect解决方案也非常干净:)

尝试使用
array\u 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);
数组_intersect解决方案也非常干净:)

输出:

array (
  1 => 'A',
  2 => 'B',
  3 => 'C',
  4 => 'D',
  5 => 'E',
)bool(true)
bool(true)
bool(true)
bool(true)
使用地图:

$result = [];
$chars_ints = array_combine($chars, $ints);
foreach($given as $char)
    $result[] = $chars_ints[$char];

var_dump($result === $require);
输出:

array (
  1 => 'A',
  2 => 'B',
  3 => 'C',
  4 => 'D',
  5 => 'E',
)bool(true)
bool(true)
bool(true)
bool(true)
使用地图,但请注意,您的数字范围只是一个移位的索引:

$result = [];
$chars_flip = array_flip($chars);
foreach($given as $char)
    $result[] = $chars_flip[$char] + 1;

var_dump($result === $require);
输出:

array (
  1 => 'A',
  2 => 'B',
  3 => 'C',
  4 => 'D',
  5 => 'E',
)bool(true)
bool(true)
bool(true)
bool(true)
最后,通过移动和变异原始数组:

array_unshift($chars, null);
$result = array_keys(array_intersect($chars, $given));

var_dump($result === $require);
输出:

array (
  1 => 'A',
  2 => 'B',
  3 => 'C',
  4 => 'D',
  5 => 'E',
)bool(true)
bool(true)
bool(true)
bool(true)
输出:

array (
  1 => 'A',
  2 => 'B',
  3 => 'C',
  4 => 'D',
  5 => 'E',
)bool(true)
bool(true)
bool(true)
bool(true)
使用地图:

$result = [];
$chars_ints = array_combine($chars, $ints);
foreach($given as $char)
    $result[] = $chars_ints[$char];

var_dump($result === $require);
输出:

array (
  1 => 'A',
  2 => 'B',
  3 => 'C',
  4 => 'D',
  5 => 'E',
)bool(true)
bool(true)
bool(true)
bool(true)
使用地图,但请注意,您的数字范围只是一个移位的索引:

$result = [];
$chars_flip = array_flip($chars);
foreach($given as $char)
    $result[] = $chars_flip[$char] + 1;

var_dump($result === $require);
输出:

array (
  1 => 'A',
  2 => 'B',
  3 => 'C',
  4 => 'D',
  5 => 'E',
)bool(true)
bool(true)
bool(true)
bool(true)
最后,通过移动和变异原始数组:

array_unshift($chars, null);
$result = array_keys(array_intersect($chars, $given));

var_dump($result === $require);
输出:

array (
  1 => 'A',
  2 => 'B',
  3 => 'C',
  4 => 'D',
  5 => 'E',
)bool(true)
bool(true)
bool(true)
bool(true)

如果这两个数组都是偶数,只需获取第一个数组的键并在第二个数组中使用它,那么代码在哪里呢?您可以在新数组元素上使用array_search()相对于旧数组,您将获得新数组元素在旧数组中的位置。@Ghost抱歉,这是一个完整的长代码,我还需要简化,我不能在这里复制整个n post,它很复杂,因为它包含的其他函数也很少。如果它对两个数组都是偶数,只需在第一个数组上获取键,然后在第二个数组上使用它,那么您的代码在哪里?您可以使用array_search()在新数组元素上相对于旧数组,您将获得新数组元素在旧数组中的位置。@Ghost抱歉,这是一个很长的代码,我也可以简化,我不能在这里复制整个内容,它很复杂,因为它包含的其他函数也很少。请注意,如果在一个或另一个原始数组中有重复的元素,则某些映射方法可能会失败,因为重复索引可能会导致删除。请注意,如果在一个或另一个原始数组中有重复的元素,则某些映射方法可能会失败,因为重复索引可能导致重击。