Php 如何将新数组与原始数组匹配
这很难解释,但我会尽力的 在html中,获取了一行a B C D E项。它们不在数组中 现在得到另一个数组,它是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 对不起,我不能很好地解释,对我来说它很复杂。(没有提供代码,因为它太长)一
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抱歉,这是一个很长的代码,我也可以简化,我不能在这里复制整个内容,它很复杂,因为它包含的其他函数也很少。请注意,如果在一个或另一个原始数组中有重复的元素,则某些映射方法可能会失败,因为重复索引可能会导致删除。请注意,如果在一个或另一个原始数组中有重复的元素,则某些映射方法可能会失败,因为重复索引可能导致重击。