Php 提取数组';s来自另一个数组的值';钥匙
我有两个阵列:Php 提取数组';s来自另一个数组的值';钥匙,php,arrays,Php,Arrays,我有两个阵列: $array1 = [1,2,3,4,5,6,7,8,9]; $array2 = [0,1,2,3]; 我想根据第二个数组中作为键的值,将第一个数组中的值分配给另一个数组。因此,不要像这样一个接一个地做: $array3 = [$array1[$array2[0]],$array1[$array2[1]],$array1[$array2[2]],$array1[$array2[3]]]; $array3 = [$array1[$array2]]; 我试着这样做: $arra
$array1 = [1,2,3,4,5,6,7,8,9];
$array2 = [0,1,2,3];
我想根据第二个数组中作为键的值,将第一个数组中的值分配给另一个数组。因此,不要像这样一个接一个地做:
$array3 = [$array1[$array2[0]],$array1[$array2[1]],$array1[$array2[2]],$array1[$array2[3]]];
$array3 = [$array1[$array2]];
我试着这样做:
$array3 = [$array1[$array2[0]],$array1[$array2[1]],$array1[$array2[2]],$array1[$array2[3]]];
$array3 = [$array1[$array2]];
但我得到了以下错误:
Warning: Illegal offset type
我想得到的是:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 )
你知道什么是正确的方法吗?解决这个问题的方法可能有很多种。 可能最简单的方法是循环第二个数组,并将第一个数组中的相应值添加到新数组中
$array3 = [];
foreach ( $array2 as $extract ) {
$array3[] = $array1 [ $extract ];
}
print_r($array3);
解决这个问题的方法可能有很多。 可能最简单的方法是循环第二个数组,并将第一个数组中的相应值添加到新数组中
$array3 = [];
foreach ( $array2 as $extract ) {
$array3[] = $array1 [ $extract ];
}
print_r($array3);
一个简单的foreach循环应该可以做到这一点。在第二个数组上循环并检查其键是否在第一个数组中设置。如果是,则添加到结果,否则跳过
$array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$array2 = [0, 1, 2, 3];
$result = [];
foreach ($array2 as $value) {
if (isset($array1[$value])) {
$result[] = $array1[$value];
}
}
print_r($result);
一个简单的foreach循环应该可以做到这一点。在第二个数组上循环并检查其键是否在第一个数组中设置。如果是,则添加到结果,否则跳过
$array1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
$array2 = [0, 1, 2, 3];
$result = [];
foreach ($array2 as $value) {
if (isset($array1[$value])) {
$result[] = $array1[$value];
}
}
print_r($result);
我找到了一条捷径:
array_map(function($x) use ($array1) { return $array1[$x]; }, $array2);
我找到了一条捷径:
array_map(function($x) use ($array1) { return $array1[$x]; }, $array2);
在PHP7.4中,您可以使用箭头函数语法并避免使用
use()
声明。如果不想调用任何自定义函数,也不想使用经典循环,则可以进行3次本机函数调用以生成结果的索引数组
代码:()
在PHP7.4中,您可以使用箭头函数语法并避免使用
use()
声明。如果不想调用任何自定义函数,也不想使用经典循环,则可以进行3次本机函数调用以生成结果的索引数组
代码:()
[$array1[$array2]
缺少一个]
。可以显示所需的输出。[$array1[$array2]
缺少一个]
。你能展示一下你想要的输出吗?哦,它实际上不起作用。如果尝试更改第二个数组中的值,则会得到不同的结果。假设第二个数组只有一个值:$array2=[4]。如果我们应用您的方法,我们将得到数组([4]=>5)。我想得到的是数组([0]=>5)我已经更新了最后一个代码,添加了Array\u values()
。这确实解决了密钥问题。但订单还有另一个问题。假设$array2=[1,0],结果将是Array([0]=>1[1]=>2),它应该是Array([0]=>2[1]=>1)使用第一种方法会更容易(我将删除第二种方法,因为这意味着也会添加排序)。哎呀,它实际上不起作用。如果尝试更改第二个数组中的值,则会得到不同的结果。假设第二个数组只有一个值:$array2=[4]。如果我们应用您的方法,我们将得到数组([4]=>5)。我想得到的是数组([0]=>5)我已经更新了最后一个代码,添加了Array\u values()
。这确实解决了密钥问题。但订单还有另一个问题。假设$array2=[1,0],结果将是Array([0]=>1[1]=>2),它应该是Array([0]=>2[1]=>1)使用第一种方法会更容易(我将删除第二种方法,因为这意味着还要添加排序)。您最初的问题甚至没有foreach的解决方案,然后你把它推进到较短的路径。现在,您发布了一个带有array_map的解决方案。很难相信您不能从foreach循环开始,但却正确地以较短的方式结束,这对脚本编写来说有点棘手。您最初的问题甚至没有foreach的解决方案,然后您将其推进到较短的方式需求。现在,您发布了一个带有array_map的解决方案。很难相信您不能从foreach循环开始,但却正确地以较短的方式结束,而这些方式的脚本编写比较复杂。