使用另一个数组按子数组键自定义排序多维数组
Custom sort a multidimensional array by subarray keys using another array
我有 2 个数组。
Array1 看起来像这样(这只是一个小例子,实际上它有超过 408 行):
Array
(
[0] => Array ( [536870925] => 34213897 )
[1] => Array ( [536870923] => 34213905 )
[2] => Array ( [536870923] => 34213913 )
[3] => Array ( [536870928] => 34213921 )
[4] => Array ( [536870926] => 34213929 )
[5] => Array ( [536870919] => 34213937 )
[6] => Array ( [536870918] => 34218041 )
[7] => Array ( [536870925] => 34218049 )
[8] => Array ( [536870929] => 34218057 )
[9] => Array ( [536870920] => 34218065 )
[10] => Array ( [536870920] => 34218073 )
)
而 Array2 看起来像这样,它只有 16 行:
Array
(
[0] => 536870922
[1] => 536870923
[2] => 536870924
[3] => 536870925
[4] => 536870926
[5] => 536870927
[6] => 536870928
[7] => 536870929
[8] => 536870914
[9] => 536870915
[10] => 536870916
[11] => 536870917
[12] => 536870918
[13] => 536870919
[14] => 536870920
[15] => 536870921
)
array2 中的所有 id 都存在于 array1 中。
array1 和 array2 都是从两个不同的索引中 snmp_get 收集的。我需要重新排序 array1 中的 id 和 tthir 等效值以匹配 array2 中显示的 id 顺序。
我尝试将 foreach 与 array1 一起使用,但使用 array2 作为控制器,就像这样,显然这不起作用..
$i = 0;
foreach ($intmac_ids as $value) {
echo $value[$unique_mac_id[$i++]];
}
我正在寻找的输出是这样的:
Array
(
[0] => Array ( [536870923] => 34213905 )
[1] => Array ( [536870923] => 34213913 )
[2] => Array ( [536870925] => 34213897 )
[3] => Array ( [536870925] => 34218049 )
[4] => Array ( [536870926] => 34213929 )
[5] => Array ( [536870928] => 34213921 )
[6] => Array ( [536870929] => 34218057 )
[7] => Array ( [536870918] => 34218041 )
[8] => Array ( [536870919] => 34213937 )
[9] => Array ( [536870920] => 34218065 )
[10] => Array ( [536870920] => 34218073 )
)
您可以在 $array1
上使用 usort()
并将 $array2
作为排序顺序查找数组传入。
代码:(Demo)
$array1 = [
[536870914 => 34213897],
[536870914 => 34213905],
[536870915 => 34213921],
[536870914 => 34213913],
[536870915 => 34213929],
[536870917 => 34213937],
[536870925 => 34218049],
];
$array2 = [
536870925,
536870914,
536870915,
536870917,
];
usort($array1, function($a, $b) use ($array2) {
return array_search(key($a), $array2) <=> array_search(key($b), $array2);
});
var_export($array1);
为了使这个过程更有效率,提前翻转查找数组。
代码:(Demo)
$array2 = array_flip($array2);
usort($array1, function($a, $b) use ($array2) {
return $array2[key($a)] <=> $array2[key($b)];
});
var_export($array1);
如果 array1 中的某些 ID 未在 array2 中表示,您将需要确定应如何对这些离群值进行排序。如果不对查找数组中的缺失值进行调整,则会生成通知并产生意外的排序结果。
这里有一个类似的 post,提供了关于该主题的一些指导:
我有 2 个数组。 Array1 看起来像这样(这只是一个小例子,实际上它有超过 408 行):
Array
(
[0] => Array ( [536870925] => 34213897 )
[1] => Array ( [536870923] => 34213905 )
[2] => Array ( [536870923] => 34213913 )
[3] => Array ( [536870928] => 34213921 )
[4] => Array ( [536870926] => 34213929 )
[5] => Array ( [536870919] => 34213937 )
[6] => Array ( [536870918] => 34218041 )
[7] => Array ( [536870925] => 34218049 )
[8] => Array ( [536870929] => 34218057 )
[9] => Array ( [536870920] => 34218065 )
[10] => Array ( [536870920] => 34218073 )
)
而 Array2 看起来像这样,它只有 16 行:
Array
(
[0] => 536870922
[1] => 536870923
[2] => 536870924
[3] => 536870925
[4] => 536870926
[5] => 536870927
[6] => 536870928
[7] => 536870929
[8] => 536870914
[9] => 536870915
[10] => 536870916
[11] => 536870917
[12] => 536870918
[13] => 536870919
[14] => 536870920
[15] => 536870921
)
array2 中的所有 id 都存在于 array1 中。
array1 和 array2 都是从两个不同的索引中 snmp_get 收集的。我需要重新排序 array1 中的 id 和 tthir 等效值以匹配 array2 中显示的 id 顺序。
我尝试将 foreach 与 array1 一起使用,但使用 array2 作为控制器,就像这样,显然这不起作用..
$i = 0;
foreach ($intmac_ids as $value) {
echo $value[$unique_mac_id[$i++]];
}
我正在寻找的输出是这样的:
Array
(
[0] => Array ( [536870923] => 34213905 )
[1] => Array ( [536870923] => 34213913 )
[2] => Array ( [536870925] => 34213897 )
[3] => Array ( [536870925] => 34218049 )
[4] => Array ( [536870926] => 34213929 )
[5] => Array ( [536870928] => 34213921 )
[6] => Array ( [536870929] => 34218057 )
[7] => Array ( [536870918] => 34218041 )
[8] => Array ( [536870919] => 34213937 )
[9] => Array ( [536870920] => 34218065 )
[10] => Array ( [536870920] => 34218073 )
)
您可以在 $array1
上使用 usort()
并将 $array2
作为排序顺序查找数组传入。
代码:(Demo)
$array1 = [
[536870914 => 34213897],
[536870914 => 34213905],
[536870915 => 34213921],
[536870914 => 34213913],
[536870915 => 34213929],
[536870917 => 34213937],
[536870925 => 34218049],
];
$array2 = [
536870925,
536870914,
536870915,
536870917,
];
usort($array1, function($a, $b) use ($array2) {
return array_search(key($a), $array2) <=> array_search(key($b), $array2);
});
var_export($array1);
为了使这个过程更有效率,提前翻转查找数组。
代码:(Demo)
$array2 = array_flip($array2);
usort($array1, function($a, $b) use ($array2) {
return $array2[key($a)] <=> $array2[key($b)];
});
var_export($array1);
如果 array1 中的某些 ID 未在 array2 中表示,您将需要确定应如何对这些离群值进行排序。如果不对查找数组中的缺失值进行调整,则会生成通知并产生意外的排序结果。
这里有一个类似的 post,提供了关于该主题的一些指导: