简体   繁体   English

基于另一个数组的PHP-Sort数组

[英]PHP-Sort array based on another array

i have visited similar question here but not getting what i want in php. 我在这里访问过类似的问题,但没有得到我想要的PHP。 Suppose i have 2 arrays. 假设我有2个数组。 All checking should be case insensitive. 所有检查都不应区分大小写。 say Field0 is same as field0 or fiEld1 is same as Field1. 假设Field0与field0相同,或者fiEld1与Field1相同。

array1 is array(
"0"=>"field0",
"1"=>"field1",
"2"=>"field2",
"3"=>"field3",
);

array2 is array(
"0"=>"field3",
"1"=>"field2",
"2"=>"field0",
"3"=>"field1",
"4"=>"field6",
"5"=>"field5",
);

Now I want array2 to be sorted based on array1 like the following: 现在我希望基于array1对array2进行排序,如下所示:

array2 is array(
"0"=>"field0",
"1"=>"field1",
"2"=>"field2",
"3"=>"field3",
"4"=>"field6",
"5"=>"field5",
);

look here array1 has 4 elements so array2 should be sorted based exactly 4 elements of array1 and rest 2 element (index 4,5 of array2) should as it is in array2 before. 看起来这里的array1有4个元素,所以应该准确地基于array1的4个元素对array2进行排序,其余2个元素(array2的索引4,5)应该像以前在array2中一样排序。

Try array_intersect combined with array_diff : 尝试将array_intersectarray_diff结合使用:

<?php
$array1 = array(
    "0"=>"field0",
    "1"=>"field1",
    "2"=>"field2",
    "3"=>"field3",
);

$array2 = array(
    "0"=>"field3",
    "1"=>"field2",
    "2"=>"field0",
    "3"=>"field1",
    "4"=>"field6",
    "5"=>"field5",
);


$array3 = array_merge(
    array_intersect($array1, $array2), 
    array_diff($array2, $array1)
);

var_dump($array3);

Update 更新

For a case insensitive approach, use array_map to guarantee all entries in both arrays are lower-cased: 对于不区分大小写的方法,请使用array_map保证两个数组中的所有条目均小写:

$array3 = array_map('strtolower', $array1);
$array4 = array_map('strtolower', $array2);

$array5 = array_merge(
    array_intersect($array3, $array4), 
    array_diff($array4, $array3)
);

var_dump($array5);

假设数组2总是大于数组1:

$array2 = array_merge($array1, array_diff($array2, $array1));

真的很简单:

$array = $array1 + $array2

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM