如何根据另一个数组的ID对数组进行排序?

时间:2015-01-27 04:39:59

标签: php arrays sorting

我有两个数组。第一个数组的行ID与某些规则匹配。 请注意,我无权访问SQL服务器以运行查询。

$ids = array (
  0 => '13',
  1 => '14',
  2 => '12',
  3 => '83'
);


$groups = array (
  0 => 
  array (
      'id' => '83',
      'email' => 'joe'
  ),
  1 => 
  array (
    'id' => '12',
    'name' => 'emily'
  ),
  2 => 
  array (
    'id' => '13',
    'name' => 'leo'
  ),
  3 => 
  array (
    'id' => '14',
    'name' => 'jack'
  )
);

我想根据第一个数组中的ID对第二个数组进行排序。预期的结果如下:

$groups = array (
  0 => 
  array (
      'id' => '13',
      'email' => 'leo'
  ),
  1 => 
  array (
    'id' => '14',
    'name' => 'jack'
  ),
  2 => 
  array (
    'id' => '12',
    'name' => 'emily'
  ),
  3 => 
  array (
    'id' => '83',
    'name' => 'joe'
  )
);

你们能帮助我吗?

谢谢!

3 个答案:

答案 0 :(得分:0)

如果您有权访问创建$ groups的代码,那么

$flippedIds = array_flip($ids);
$group[flippedIds[$id]] = array($id,$name);
ksort($group);

否则你可以

$flippedIds = array_flip($ids);
foreach $group as $k => $val){
  $group[$k] = $group[$flippedIds[$val['id']]][$k][$val];
}
ksort($group);

如果$ group数组永远不会有来自$ ids的重复id,则可以删除[$ k]元素。否则,重复的值将覆盖前一个。

$flippedIds = array_flip($ids);
foreach $group as $k => $val){
  $group[$k] = $group[$flippedIds[$val['id']]][$val];
}
ksort($group);

答案 1 :(得分:0)

$flippedIds = array_flip($ids);

$result = array();

foreach ($group as $item) {
   $result[$flippedIds[$item['id']]] = $item;
}

这是因为您的$ ID是唯一的。

你也可能需要投入

ksort($result)

答案 2 :(得分:0)

试试这个。

function recursive_array_search($needle,$haystack) {
    foreach($haystack as $key=>$value) {
        $current_key=$key;
        if($needle===$value OR (is_array($value) && recursive_array_search($needle,$value) !== false)) {
            return $current_key;
        }
    }
    return false;
}

$newArray = array();
for($i=0;$i<count($ids);$i++)
{       
    $groupKey = recursive_array_search($ids[$i],$groups);
    $newArray[] = $groups[$groupKey];        
}

print_r($newArray);