【问题标题】:use array_multisort in multidimensional array在多维数组中使用 array_multisort
【发布时间】:2014-02-21 22:09:34
【问题描述】:

我有一个包含这些值的数组 A

array(
  0 => 'D003',
  1 => 'P001',
  2 => 'P002',
  3 => 'D001'
);

我还有另一个包含这些值的多维数组 B

 array(
      0 => 
        array(
          'waypoint_id' => 'D001',
          'count' => '5'),
      1 => 
        array(
          'waypoint_id' => 'D003',
          'count' => '1'),
      2 => 
        array(
          'waypoint_id' => 'P001',
          'count' => '2'),
      3 => 
        array(
          'waypoint_id' => 'P002',
          'count' => '1')
    );   

如何使用 array_multisort 让我的数组 B 像这样(与数组 B 的顺序相同)

  array(
      0 => 
        array(
          'waypoint_id' => 'D003',
          'count' => '1'),
      1 => 
        array(
          'waypoint_id' => 'P001',
          'count' => '2'),
      2 => 
        array(
          'waypoint_id' => 'P002',
          'count' => '1'),
      3 => 
        array(
          'waypoint_id' => 'D001',
          'count' => '5')
    );

【问题讨论】:

    标签: php array-multisort


    【解决方案1】:

    我不确定array_multisort() 是否可以帮助您,因为 A 的内容没有任何明显的顺序。

    为了提高效率,我会按航点索引 B,然后从 A 创建一个新的 $ordered 数组:

    $indexed = array();
    foreach($b as $array) {
        $indexed[$array['waypoint_id']] = $array;
    }
    
    $ordered = array();
    foreach($a as $waypoint) {
        $ordered[] = $indexed[$waypoint];
    }
    

    【讨论】:

    • 是的,这行得通。我认为 array_multisort 可以用来解决这个问题。非常感谢
    • 我喜欢这种方法。 +1
    【解决方案2】:
    $result = array();
    
    foreach ($A as $search) {
        foreach ($B as $elt) {
            if ($elt['waypoint_id'] === $search) {
                array_push($result, $B);
                break;
            }
        }
    }
    
    var_dump($result);
    

    【讨论】:

      猜你喜欢
      • 2013-04-18
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多