Php 数组最高值还是创建下一个值?
我有一个名字和id的数组Php 数组最高值还是创建下一个值?,php,Php,我有一个名字和id的数组 Array( 0=>array( name=>New York, id=>45763448349, can=0 ), 1=>array( name=>New York2, id=>45763464566, can=0 ), 3=>array( name=>New Y
Array(
0=>array(
name=>New York,
id=>45763448349,
can=0
),
1=>array(
name=>New York2,
id=>45763464566,
can=0
),
3=>array(
name=>New York3,
id=>45763464854,
can=0
),
4=>array(
name=>New York4,
id=>45763464955,
can=0
),
5=>array(
name=>New York5,
id=>45763464745,
can=0
),
6=>array(
name=>New York6,
id=>45763464235,
can=1
)
)
例如(将有不同的名称(不是所有的纽约)),我有一个带有名称的x变量(例如x=newyork),我需要做的是找到最高的名称并获取id,然后确保can是1,否则会指定下一个最高的名称
例如,假设我有x=newyork,所以我查看数组,发现最高的数组名是newyork6。我看到can=1,所以我只需获取id。现在如果可以!=那么我就可以去纽约了
注意:这个数组将包含许多不同的值(不是所有的纽约值,我只是用它们作为例子)
现在我到底该怎么开始呢?类似这样的事情:
//$my_array is your array of values
//$string = 'New York'; your search term
$id = false;
for($i = count($my_array) - 1; $i >= 0; $i++) {
if($id === false) {
if(strpos($my_array[$i]['name'], $string) !== false && $my_array[$i]['can'] == 1) {
$id = $my_array[$i]['id'];
}
}
}
//Insert it if no id was found
if($id === false) {
$id = 'something';
$can = 1;
array_push($my_array, array('name' => $string, 'id' => $id, 'can' => $can));
}
这样行吗
编辑
(如果不明显,$string
就是您要搜索的内容)在代码中:
function city_cmp($record_a, $record_b) {
return strcmp($record_a["name"], $record_b["name"];
}
usort($cities, 'city_cmp');
end($cities);
$city = current($cities);
do {
if ($city["can"] === 1) {
$can_city = $city;
break;
}
} while ($city = prev($cities));
注意:您可以选择跳过中断
,将$can_city
作为您的while条件的一部分。有些人更喜欢这样,因为这样可以使循环退出条件更清晰
快速步骤:
因为它是一个多维数组(我称之为$array),所以您可能需要遍历它一次才能找到相关数据
$highest_id = array('id' => 0, 'count' => 0, 'can' => 0);
for each ( $array AS $key => $data )
{
if ( substr($data['name'],0,strlen($x)) == $x )
{
$current_count = (int) substr($data['name'],strlen($x));
if ( $current_count > $highest_id['count'] )
{
$highest_id = array('id' => $data['id'], 'count' => $current_count, 'can' => $data['can']);
}
}
}
if ( $highest_id['can'] == 1 )
{
$id = $highest_id['id'];
}
else
{
// can is not 1 => specify new $x
}
首先把你的任务分成几个小任务。第一个筛选条件似乎是
can=1
。让我们和你的同事核实一下
现在,筛选出与纽约(和一个数字)不匹配的条目
现在,您只需要使用排序并选择第一个元素:
usort($ar, function($el1, $el2) {
$id1 = $el1['id']; $id2 = $el2['id'];
if ($id1 == $id2) return 0;
return $id1 < $id2 ? 1 : -1;
});
if (count($ar) > 0) {
$result = $ar[0];
} else {
// Nothing matched your criteria
}
usort($ar,function($el1,$el2){
$id1=$el1['id'];$id2=$el2['id'];
如果($id1==$id2)返回0;
返回$id1<$id2?1:-1;
});
如果(计数($ar)>0){
$result=$ar[0];
}否则{
//没有任何东西符合你的标准
}
最高姓名?换句话说?我还认为“纽约”、“纽约2”等都是字符串。所以把它们放在“'”旁边。快速提问。。。“最高名称”是指字符串比较中的最高值,还是指末尾的最高数字?e、 g.“纽约2”是比“纽约12”更高的字符串,但数字12明显高于2。你在找哪种解释?还是两者结合?例如“Denver1”、“Denver2”、“Chicago1”、“Chicago2”、“Chicago3”,它应该先勾选“Denver2”,然后再勾选“Denver1”,因为字符串“Denver”高于“Chicago”,它将查找该名称中的最高值(字符串比较),所以如果我要查找纽约,那么纽约6如果我要查找巨人鲍勃,无论是哪一个,等等。它可能是彼此不同的字符串。在这里,你假设$string一直是“纽约”。@Charlie-是的,向他展示了他正在寻找的东西。我设置的只是一个任意字符串。我使用“newyork”是因为他在他的示例中使用了“newyork”…是的,但数组可以类似于数组(0=>array('name'=>'newyork1')、1=>array('name'=>'sanfrancisco 123');这不是傻瓜式的,而是一个快速的草图。如果这似乎对您有效,请注意像“New York”这样没有数字的情况。您还可以通过将该字符串设置为整数将“New York2”转换为“2”。例如“settype($string,'int');”。请记住管理不带整数的“newyork”的情况。@Steven用create_函数替换函数的每个实例(请参见php.net/manual/en/function.create function.php)。例如,最后一个函数如下所示:create_函数('$el1,$el2','return$id1
$ar = array_filter($ar, function($el) {
$search = 'New York';
$name = $ar['name'];
$potentialNumber = substr($name, strlen($search));
return ((substr($name, 0, strlen($search)) == $search) && // starts with NY
($potentialNumber == '' || is_numeric($potentialNumber)); // [0-9]*
});
// $ar contains only 'New York' and 'New York6' now
usort($ar, function($el1, $el2) {
$id1 = $el1['id']; $id2 = $el2['id'];
if ($id1 == $id2) return 0;
return $id1 < $id2 ? 1 : -1;
});
if (count($ar) > 0) {
$result = $ar[0];
} else {
// Nothing matched your criteria
}