例如,我有两个数组阵列1:
Array(
[id] => 50575
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
阵列2:
Array
(
[0] => Array
(
[id] => 53295
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[1] => Array
(
[id] => 53323
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[2] => Array
(
[id] => 53391
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[3] => Array
(
[id] => 53402
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[4] => Array
(
[id] => 57130
[name] => Funbox - Pirates and Princesses
[venue_id] => 2980
)
[5] => Array
(
[id] => 57142
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[6] => Array
(
[id] => 50575
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[7] => Array
(
[id] => 50601
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[8] => Array
(
[id] => 56113
[name] => Funbox - Pirates and Princesses
[venue_id] => 2882
)
)
阵列1将是来自阵列2的任何一个子阵列,
现在我希望在数组2中,第一个数组应该是数组1,然后应该存在那些具有与数组1相同的场所id的子数组,然后是所有其他数组。如何进行排序?如果有英语错误的话,我很抱歉。
预期输出:
Array
(
[6] => Array
(
[id] => 50575
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[5] => Array
(
[id] => 57142
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[7] => Array
(
[id] => 50601
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[0] => Array
(
[id] => 53295
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[1] => Array
(
[id] => 53323
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[2] => Array
(
[id] => 53391
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[3] => Array
(
[id] => 53402
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[4] => Array
(
[id] => 57130
[name] => Funbox - Pirates and Princesses
[venue_id] => 2980
)
[8] => Array
(
[id] => 56113
[name] => Funbox - Pirates and Princesses
[venue_id] => 2882
)
)
这是一个自定义函数,应该做你想做的事:
function sortArr($haystack, $needle){
$out = array();
foreach ($haystack as $index => $arr){
if ($arr == $needle){
$out["$index"] = $arr;
unset ($haystack[$index]);
break;
}
}
foreach ($haystack as $index => $arr){
if ($arr['venue_id'] == $needle['venue_id']){
$out["$index"] = $arr;
unset($haystack[$index]);
}
}
if (is_array($haystack)){
return array_merge($out,$haystack);
}
}
以下是演示链接
您可以使用usort按照示例顺序对其进行排序。
function cmp($a, $b) {
return $b["venue_id"] - $a["venue_id"];
}
usort($array2,"cmp");
所有这些都是按venue_id降序排序。因此,所有具有相同venue_id的数组都将被分组,最高的venue_id位于顶部。从你的回答中还不清楚你是否想要其他东西。
编辑:我对此进行了更多的思考,并提出了一个函数,该函数应该按照我的想法执行您的要求。它并不完美,但它应该起作用。
function customSort($array1,$array2) {
global $primaryVenue_id;
$primaryVenue_id = $array1["venue_id"];
function cmp($a, $b) {
global $primaryVenue_id;
if ($a["venue_id"] == $primaryVenue_id) return -1;
elseif ($b["venue_id"] == $primaryVenue_id) return 1;
else return $b["venue_id"] - $a["venue_id"];
}
usort($array2, "cmp");
unset($primaryVenue_id);
return $array2;
}
基本上,如果您调用函数customSort($array1,$array2),那么它将返回$array2,所有子数组首先包含与$array1相同的venue_id,然后是id的降序。
您可以从第二个数组中取消设置匹配元素,然后使用函数array_unshift($array, $element);
来预挂数组。
$needle = array(
'id' => 50575,
'name' => 'Funbox - Pirates and Princesses',
'venue_id' => 3248
);
$stack = array(
[0] => Array
(
[id] => 53295
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[1] => Array
(
[id] => 53323
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[2] => Array
(
[id] => 53391
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[3] => Array
(
[id] => 53402
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[4] => Array
(
[id] => 57130
[name] => Funbox - Pirates and Princesses
[venue_id] => 2980
)
[5] => Array
(
[id] => 57142
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[6] => Array
(
[id] => 50575
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[7] => Array
(
[id] => 50601
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[8] => Array
(
[id] => 56113
[name] => Funbox - Pirates and Princesses
[venue_id] => 2882
)
);
foreach ($stack as $k => $v) {
if ($v['id'] == $needle['id']) {
unset($stack[$k]);
array_unshift($stack, $needle);
break;
} else {
//echo 'No matching element in existing array.';
}
}
print_r($testArray);
输出将是:
Array
(
[0] => Array
(
[id] => 50575
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[1] => Array
(
[id] => 53295
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[2] => Array
(
[id] => 53323
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[3] => Array
(
[id] => 53391
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[4] => Array
(
[id] => 53402
[name] => Funbox - Pirates and Princesses
[venue_id] => 2954
)
[5] => Array
(
[id] => 57130
[name] => Funbox - Pirates and Princesses
[venue_id] => 2980
)
[6] => Array
(
[id] => 57142
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[7] => Array
(
[id] => 50601
[name] => Funbox - Pirates and Princesses
[venue_id] => 3248
)
[8] => Array
(
[id] => 56113
[name] => Funbox - Pirates and Princesses
[venue_id] => 2882
)
)