<?php
function byName($left,$right)
{
if ($left[0] == $right[0])
{
return 0;
}
return ($left[0] < $right[0]) ? -1 : 1;
}
$employee[] = array("tom, John", "Programmer", 20);
$employee[] = array("jas, John", "Programmer", 20);
$employee[] = array("june, John", "Programmer", 20);
$employee[] = array("aili, John", "Programmer", 20);
$employee[] = array("Doe, Jane", "Programmer", 20);
$employee[] = array("Mann, Joe", "Manager", 35);
$employee[] = array("Smith, John", "CEO", 50);
$employee[] = array("Leeds, Al", "President", 100);
usort($employee, "byName");$name = "Smith, John";$lower_limit = 0;
$upper_limit = count($employee) - 1;
while($lower_limit < $upper_limit)
{ $index = intval(($lower_limit + $upper_limit) / 2); if (strcmp($employee['index'][0] , $name) > 0)
{
$lower_limit = $index + 1;
}
elseif (strcmp($employee['index'][0] , $name) < 0)
{ $upper_limit = $index - 1;
}
else
{
echo "<br>";
$lower_limit = $index;
$upper_limit = $index;
}
}printf("该名字在数组位置"."$index<br>\n");
?>问题1
按照byName 排序后,为什么是(Doe,leed mann,smilth,alili,jas,jun,tom)不懂什么原理
问题2
就算排序后为上述内容
$name="Smith, John"; 那运行循环语句里面的选择语句应该是else(最后那个,因为相等),为什运行的是第二个谢谢
function byName($left,$right)
{
if ($left[0] == $right[0])
{
return 0;
}
return ($left[0] < $right[0]) ? -1 : 1;
}
$employee[] = array("tom, John", "Programmer", 20);
$employee[] = array("jas, John", "Programmer", 20);
$employee[] = array("june, John", "Programmer", 20);
$employee[] = array("aili, John", "Programmer", 20);
$employee[] = array("Doe, Jane", "Programmer", 20);
$employee[] = array("Mann, Joe", "Manager", 35);
$employee[] = array("Smith, John", "CEO", 50);
$employee[] = array("Leeds, Al", "President", 100);
usort($employee, "byName");$name = "Smith, John";$lower_limit = 0;
$upper_limit = count($employee) - 1;
while($lower_limit < $upper_limit)
{ $index = intval(($lower_limit + $upper_limit) / 2); if (strcmp($employee['index'][0] , $name) > 0)
{
$lower_limit = $index + 1;
}
elseif (strcmp($employee['index'][0] , $name) < 0)
{ $upper_limit = $index - 1;
}
else
{
echo "<br>";
$lower_limit = $index;
$upper_limit = $index;
}
}printf("该名字在数组位置"."$index<br>\n");
?>问题1
按照byName 排序后,为什么是(Doe,leed mann,smilth,alili,jas,jun,tom)不懂什么原理
问题2
就算排序后为上述内容
$name="Smith, John"; 那运行循环语句里面的选择语句应该是else(最后那个,因为相等),为什运行的是第二个谢谢
我程序运行没有错误啊
$employee['index'][0]为什么不行?
我echo 一下 他的值就是 "Smith, John"
想知道你是怎么改的
谢谢
bool usort ( array &array, callback cmp_function )
将用用户自定义的比较函数对一个数组中的值进行排序。
比较函数必须在第一个参数被认为小于,等于或大于第二个参数时分别返回一个小于,等于或大于零的整数。对$employee排序的结果
Array
( [0] => Array(
[0] => Doe, Jane
[1] => Programmer
[2] => 20)
[1] => Array(
[0] => Leeds, Al
[1] => President
[2] => 100)
[2] => Array(
[0] => Mann, Joe
[1] => Manager
[2] => 35
)
[3] => Array
(
[0] => Smith, John
[1] => CEO
[2] => 50
)
[4] => Array
(
[0] => aili, John
[1] => Programmer
[2] => 20
)
...
...
[7] => Array
(
[0] => tom, John
[1] => Programmer
[2] => 20)
)
2.在排过序的$employee中查找 'Smith, John',使用的是二分查找,又叫折半查找3.找到的结果'Smith, John'$employee中的序号,也就是 3
array_multisort($arrField, SORT_DESC, $employee);
var_dump($employee);原文