[英]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_intersect与array_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.