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 "); 

解决方案 »

  1.   

      $index =intval( ($lower_limit + $upper_limit));     //进行二分查找
      

  2.   

    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;
        }
    }    该名字在数组位置8 不是你要的结果吗?
      

  3.   

    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); $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))); 
      

  4.   

    不知道楼主的具体要求或者说目的是什么?$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);foreach ($employee as $row) {
    $arr[] = $row[0];
    }
    $name = 'g';
    $arr = array_flip($arr);
    echo "$name 对应的数组下标是:$arr[$name]";