Php 使用另一个数组对数组排序

Php 使用另一个数组对数组排序,php,Php,我有一个产品数组,我想用另一个数组对它们进行排序 $products = array( 0 => 'Pro 1', 1 => 'Pro 2', 2 => 'Pro 3' ); $sort = array(1,2,0); array_multisort($products, $sort); 数组现在应该是 $products = array( 0 => 'Pro 2', 1 => 'Pro 3', 2 => 'Pro 1' );

我有一个产品数组,我想用另一个数组对它们进行排序

$products = array(
  0 => 'Pro 1',
  1 => 'Pro 2',
  2 => 'Pro 3'
);

$sort = array(1,2,0);

array_multisort($products, $sort);
数组现在应该是

$products = array(
  0 => 'Pro 2',
  1 => 'Pro 3',
  2 => 'Pro 1'
);

我似乎没有正确使用array\u multisort。我已经尝试了两个小时的不同方法…

array\u multisort
对第二个数组进行排序,并将排序顺序应用于第一个数组。要执行任务,排序数组必须是
$sort=array(2,0,1)(意味着:将第二个元素设为0,将第三个元素设为1,将第一个元素设为2)

您只需使用

foreach ($sort as $key) {
    $sorted_products[] = $products[$key];
}

这似乎比一种分类更合适:

$products = array_map(function($i) use ($products) {
   return $products[$i];
}, $sort);
array\u multisort()
无法实现您试图使用该特定代码实现的目标

下面是一个函数,它将:

function sort_by_other_array ($input, $order) {
  $result = array();
  foreach ($order as $item) {
    $result[] = $input[$item];
  }
  return $result;
}

这不会检查错误,但会执行您想要的操作。您可能需要添加检查以确保
$order
中指定的键存在于
$input

元素索引是否总是与
$sort
数组中的数字匹配?我认为
数组(1,2,0)
应该是
3,1,2
,如果需要
2,3,1
,您应该使用
数组(2,0,1)
Vyktor是正确的如果你想使用
array\u multisort($sort$products)
,数组必须是
[2,0,1]
。可以这样想:“我希望
$products
的第一个元素是@index 2,第二个元素是index 0,第三个元素是index 1。”对于当前数组,您只需要使用某种形式的迭代(即
数组映射
)作为给出的答案说明。+1,因为如果我之前读过这篇文章,我不需要对这个问题本身留下评论。事实上,有没有其他方法来写这个问题?Dreamweaver认为它无效php@tuurbo,它对PHP5.3+有效。Dreamweaver认为它是否有效无关紧要。。。其他任何一个答案都适用于旧版本的PHP。