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循环开始,但却正确地以较短的方式结束,而这些方式的脚本编写比较复杂。