Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/252.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 数组最高值还是创建下一个值?_Php - Fatal编程技术网

Php 数组最高值还是创建下一个值?

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

我有一个名字和id的数组

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条件的一部分。有些人更喜欢这样,因为这样可以使循环退出条件更清晰

快速步骤:

  • 阵列

  • 用于指向阵列的末端,直到找到can=1


  • 因为它是一个多维数组(我称之为$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
    }