function byName($left,$right){
if($left[0] == $right[0]){
return 0;
}
return ($left[0] < $right[0])? -1 : 1;
}$employee[] = array("a", "Programmer", 20);
$employee[] = array("b", "Programmer", 20);
$employee[] = array("c", "Programmer", 20);
$employee[] = array("g", "Programmer", 20);
$employee[] = array("i", "Programmer", 20);
$employee[] = array("h", "Programmer", 20);
$employee[] = array("f", "Programmer", 20);
$employee[] = array("d", "Programmer", 20);
$employee[] = array("e", "Programmer", 20); usort($employee, "byName"); //排序$name="h";
$lower_limit = 0;
$upper_limit = count($employee) - 1 ; //数组的最大下标
while($lower_limit < $upper_limit ){
$index =intval( ($lower_limit + $upper_limit) //进行二分查找
if( strcmp($employee[$index][0],$name) > 0){
$lower_limit = $index + 1;
}else if( strcmp($employee[$index][0],$name) < 0){
$lower_limit = $index - 1;
}else{
echo $index;
}
}
printf("该名字在数组位置"."$index ");
if($left[0] == $right[0]){
return 0;
}
return ($left[0] < $right[0])? -1 : 1;
}$employee[] = array("a", "Programmer", 20);
$employee[] = array("b", "Programmer", 20);
$employee[] = array("c", "Programmer", 20);
$employee[] = array("g", "Programmer", 20);
$employee[] = array("i", "Programmer", 20);
$employee[] = array("h", "Programmer", 20);
$employee[] = array("f", "Programmer", 20);
$employee[] = array("d", "Programmer", 20);
$employee[] = array("e", "Programmer", 20); usort($employee, "byName"); //排序$name="h";
$lower_limit = 0;
$upper_limit = count($employee) - 1 ; //数组的最大下标
while($lower_limit < $upper_limit ){
$index =intval($lower_limit + $upper_limit); //进行二分查找
if( strcmp($employee[$index][0],$name) > 0){
$lower_limit = $index + 1;
}else if( strcmp($employee[$index][0],$name) < 0){
$lower_limit = $index - 1;
}else{
echo $index;
}
} 该名字在数组位置8 不是你要的结果吗?
if($left[0] == $right[0]){
return 0;
}
return ($left[0] < $right[0])? -1 : 1;
}$employee[] = array("a", "Programmer", 20);
$employee[] = array("b", "Programmer", 20);
$employee[] = array("c", "Programmer", 20);
$employee[] = array("g", "Programmer", 20);
$employee[] = array("i", "Programmer", 20);
$employee[] = array("h", "Programmer", 20);
$employee[] = array("f", "Programmer", 20);
$employee[] = array("d", "Programmer", 20);
$employee[] = array("e", "Programmer", 20); $i = 0;
$name = 'h';
function chk($v){
global $i,$name;
$i++;
return (in_array($name,$v))?$i:'';
}
printf("\n该名字原始数组位置:".join('',array_map('chk',$employee)));
usort($employee, "byName"); //排序
$i = 0;
printf("\n该名字在排序后数组位置:".join('',array_map('chk',$employee)));
$employee[] = array("b", "Programmer", 20);
$employee[] = array("c", "Programmer", 20);
$employee[] = array("g", "Programmer", 20);
$employee[] = array("i", "Programmer", 20);
$employee[] = array("h", "Programmer", 20);
$employee[] = array("f", "Programmer", 20);
$employee[] = array("d", "Programmer", 20);
$employee[] = array("e", "Programmer", 20);foreach ($employee as $row) {
$arr[] = $row[0];
}
$name = 'g';
$arr = array_flip($arr);
echo "$name 对应的数组下标是:$arr[$name]";