按其他数组中给出的特定顺序对数组值进行排序



我的数组是正确的顺序:

$orderDoc = array("ORT", "TRI", "CONT", "RMI");

这些文档位于多个服务器和数据库的不同表中。
在对文档进行搜索结束时,我通常会得到一个带有以下结构的数组,但元素处于混乱状态:

//模拟变量:

$FindDoc= array("RMI0000191","ORT0000379","ORT0000391","ORT0000392","ORT0000390","CONT0000274","CONT0000275","RMI0000192","ORT0000391");

ouput:

array(10) {
  [0]=>
  string(10) "RMI0000191"
  [1]=>
  string(10) "ORT0000379"
  [2]=>
  string(10) "ORT0000391"
  [3]=>
  string(10) "ORT0000392"
  [4]=>
  string(10) "ORT0000390"
  [5]=>
  string(11) "CONT0000274"
  [6]=>
  string(11) "CONT0000275"
  [7]=>
  string(10) "RMI0000192"
  [8]=>
  string(10) "ORT0000394"
  [9]=>
  string(10) "TRI0000170"
}

我尝试使用它,但行不通。我遇到了一个错误,因为第二个参数需要整数:

$FindDoc=asort($FindDoc,$orderDoc );

在研究此本机功能都没有工作之后:

PHP - Sort Functions For Arrays
In this chapter, we will go through the following PHP array sort functions:
sort() - sort arrays in ascending order
rsort() - sort arrays in descending order
asort() - sort associative arrays in ascending order, according to the value
ksort() - sort associative arrays in ascending order, according to the key
arsort() - sort associative arrays in descending order, according to the value
krsort() - sort associative arrays in descending order, according to the key

https://www.w3schools.com/php/php_arrays_sort.asp

如何获得正确的价值顺序?

预期的示例,按$ orderdoc订单和数字文档订购:

array(10) {
  [0]=>
  string(10) "ORT0000379"
  [1]=>
  string(10) "ORT0000390"
  [2]=>
  string(10) "ORT0000391"
  [3]=>
  string(10) "ORT0000392"
  [4]=>
  string(10) "ORT0000394"
  [5]=>
  string(10) "TRI0000170"
  [6]=>
  string(11) "CONT0000274"
  [7]=>
  string(11) "CONT0000275"
  [8]=>
  string(10) "RMI0000191"
  [9]=>
  string(10) "RMI0000192"
}

更新我尝试使用自定义功能,但获取Somes错误的:

foreach ($FindDoc as $StructureMember) {
    $key = array_search($StructureMember, function ($StructureMember, $orderDoc ) {
        return (strpos($StructureMember, $orderDoc ));
    });
    $result[$key] = $StructureMember;
}
$FindDoc = $result;

输出:

Warning: array_search() expects parameter 2 to be array, object given in C:xampphtdocsclassclass.docinfo.php on line 15

循环订单DOC并使用preg_grep获取以相同字符开头的所有数组项。
然后对返回的数组进行排序,然后将它们合并到结果数组中。

$orderDoc = array("ORT", "TRI", "CONT", "RMI");
$FindDoc= array("RMI0000191","ORT0000379","ORT0000391","ORT0000392","ORT0000390","CONT0000274","CONT0000275","RMI0000192","ORT0000391");
$result =[];
foreach($orderDoc as $doc){
    $temp = preg_grep("/^". preg_quote($doc) . "/", $FindDoc);
    sort($temp);
    $result = array_merge($result, $temp);
}
var_dump($result);

$结果:

array(9) {
  [0]=>
  string(10) "ORT0000379"
  [1]=>
  string(10) "ORT0000390"
  [2]=>
  string(10) "ORT0000391"
  [3]=>
  string(10) "ORT0000391"
  [4]=>
  string(10) "ORT0000392"
  [5]=>
  string(11) "CONT0000274"
  [6]=>
  string(11) "CONT0000275"
  [7]=>
  string(10) "RMI0000191"
  [8]=>
  string(10) "RMI0000192"
}

https://3v4l.org/equbv

注意:这保留了您的数组中的重复项。
您不要说应该删除它们,但是如果要删除它们,只需在$ result

合并之前添加array_unique((((

相关内容

  • 没有找到相关文章

最新更新