我正在尝试创建一个靠近餐馆的应用程序,我使用数据库通过zipcodes检索附近
所以我现在有一个类似
的数组$sortLike=array(60007,60001,60003,60002);
和数据库返回数组,如
$array1= array( array ('ID' => 138,'zip_code' => 60007,'approved' => 1),
array('ID' => 103,'zip_code' => 60007,'approved' => 0),
array('ID' => 124,'zip_code' => 60002,'approved' => 0),
array('ID' => 104,'zip_code' => 60002,'approved' => 1),
array('ID' => 105,'zip_code' => 60003,'approved' => 0),
array('ID' => 106,'zip_code' => 60001,'approved' => 0),
array('ID' => 114,'zip_code' => 60007,'approved' => 0)
);
所以我需要显示所有被批准的餐馆,但是按照$ sortLike数组的顺序 即返回的数组应该是
$array1= array(
array ('ID' => 138,'zip_code' => 60007,'approved' => 1),
array('ID' => 103,'zip_code' => 60007,'approved' => 0),
array('ID' => 114,'zip_code' => 60007,'approved' => 0)
array('ID' => 106,'zip_code' => 60001,'approved' => 0),
array('ID' => 105,'zip_code' => 60003,'approved' => 0),
array('ID' => 104,'zip_code' => 60002,'approved' => 1),
array('ID' => 124,'zip_code' => 60002,'approved' => 0),
);
这是我试过的
function sortarray1($mylist,$mainZipSearch){
$newList=$newList2=$newList3 = array();
$j=$k=$l=0;
if(count($mylist))
{
foreach($mylist as $k=>$v) {
if( $v['approved']==1 && $v['zip_code']==$mainZipSearch){
$newList[$j] = $mylist[$k];
}
else if( $v['approved']==0 && $v['zip_code']==$mainZipSearch){
$newList2[$k] = $mylist[$k];
}
else{
$newList3[$l] = $mylist[$k];
}
$j++;$k++;$l++;
}
$newList=array_values($newList);
$newList2=array_values($newList2);
$newList3=array_values($newList3);
$arr=array_merge($newList,$newList2,$newList3 );
}
return
}
答案 0 :(得分:2)
你走得太远了!
使用usort
可以更轻松地处理这些问题。
function sort_results ($a, $b) {
$sortLike=array(60007,60001,60003,60002);
// Push unknown values at the end of the array
if (!in_array ($a['zip_code'], $sortLike)) { return 1; }
return array_search($a['zip_code'], $sortLike) > array_search($b['zip_code'], $sortLike);
}
usort ($arr, 'sort_results');
print_r ($arr);
Array (
[0] => Array ( [ID] => 114 [zip_code] => 60007 [approved] => 0 )
[1] => Array ( [ID] => 103 [zip_code] => 60007 [approved] => 0 )
[2] => Array ( [ID] => 138 [zip_code] => 60007 [approved] => 1 )
[3] => Array ( [ID] => 106 [zip_code] => 60001 [approved] => 0 )
[4] => Array ( [ID] => 105 [zip_code] => 60003 [approved] => 0 )
[5] => Array ( [ID] => 124 [zip_code] => 60002 [approved] => 0 )
[6] => Array ( [ID] => 104 [zip_code] => 60002 [approved] => 1 )
[7] => Array ( [ID] => 184 [zip_code] => 60022 [approved] => 0 )
)
答案 1 :(得分:0)
这就是我们拥有关系数据库的原因。如果您有一个返回Zipcodes排序列表的查询,那么只需加入返回已批准餐馆的查询。
答案 2 :(得分:0)
您可以尝试这样的事情:
<?
$sortLike=array(60007,60001,60003,60002);
$array1= array( array ('ID' => 138,'zip_code' => 60007,'approved' => 1),
array('ID' => 103,'zip_code' => 60007,'approved' => 0),
array('ID' => 124,'zip_code' => 60002,'approved' => 0),
array('ID' => 104,'zip_code' => 60002,'approved' => 1),
array('ID' => 105,'zip_code' => 60003,'approved' => 0),
array('ID' => 106,'zip_code' => 60001,'approved' => 0),
array('ID' => 114,'zip_code' => 60007,'approved' => 0)
);
function removeNonApproved($var) {
return $var['approved'];
}
function cmp($a,$b) {
global $sortLike;
return (array_search($a['zip_code'],$sortLike) < array_search($b['zip_code'],$sortLike) ) ? -1 : 1;
}
// Remove non approved items
$array1 = array_filter($array1,"removeNonApproved");
// Sort your array
usort($array1, "cmp");
var_dump($array1);
?>