天道酬勤,学无止境

PHP不区分大小写的in_array函数(PHP case-insensitive in_array function)

问题

使用in_array函数时是否可以进行不区分大小写的比较?

因此,使用这样的源数组:

$a= array(
 'one',
 'two',
 'three',
 'four'
);

以下查找将全部返回true:

in_array('one', $a);
in_array('two', $a);
in_array('ONE', $a);
in_array('fOUr', $a);

哪些功能或一组功能会做同样的事情? 我不认为in_array本身可以做到这一点。

回答1

您可以使用preg_grep():

$a= array(
 'one',
 'two',
 'three',
 'four'
);

print_r( preg_grep( "/ONe/i" , $a ) );
回答2

显而易见的事情是将搜索词转换为小写:

if (in_array(strtolower($word), $array)) { 
  ...

当然,如果数组中有大写字母,则需要先执行以下操作:

$search_array = array_map('strtolower', $array);

并搜索。 每次搜索都对整个数组执行strtolower毫无意义。

但是搜索数组是线性的。 如果你有一个大的数组或你打算这样做了很多,这将是更好地把搜索条件在阵列的关键,因为这将是更快的访问:

$search_array = array_combine(array_map('strtolower', $a), $a);

然后

if ($search_array[strtolower($word)]) { 
  ...

这里唯一的问题是数组键必须是唯一的,因此如果发生冲突(例如“一个”和“一个”),则将丢失所有内容(只有一个)。

回答3
function in_arrayi($needle, $haystack) {
    return in_array(strtolower($needle), array_map('strtolower', $haystack));
}

来自文档

回答4
function in_arrayi($needle, $haystack) {
    return in_array(strtolower($needle), array_map('strtolower', $haystack));
}

资料来源:php.net in_array手册页。

回答5

假设您要使用in_array,这是使搜索大小写不敏感的方法。

不区分大小写的in_array():

foreach($searchKey as $key => $subkey) {

     if (in_array(strtolower($subkey), array_map("strtolower", $subarray)))
     {
        echo "found";
     }

}

正常区分大小写:

foreach($searchKey as $key => $subkey) {

if (in_array("$subkey", $subarray))

     {
        echo "found";
     }

}
回答6

如果我们假设数组只能包含字符串,但是数组也可以包含其他数组,则以上内容是正确的。 另外in_array()函数可以接受$ needle的数组,因此如果$ needle是数组,则strtolower($ needle)不起作用,如果$ haystack包含其他数组,则array_map('strtolower',$ haystack)不起作用数组,但会导致“ PHP警告:strtolower()期望参数1为字符串,给定数组”。

例子:

$needle = array('p', 'H');
$haystack = array(array('p', 'H'), 'U');

因此,我使用相关的方法创建了一个帮助程序类,以进行区分大小写和不区分大小写的in_array()检查。 我还使用了mb_strtolower()而不是strtolower(),因此可以使用其他编码。 这是代码:

class StringHelper {

public static function toLower($string, $encoding = 'UTF-8')
{
    return mb_strtolower($string, $encoding);
}

/**
 * Digs into all levels of an array and converts all string values to lowercase
 */
public static function arrayToLower($array)
{
    foreach ($array as &$value) {
        switch (true) {
            case is_string($value):
                $value = self::toLower($value);
                break;
            case is_array($value):
                $value = self::arrayToLower($value);
                break;
        }
    }
    return $array;
}

/**
 * Works like the built-in PHP in_array() function — Checks if a value exists in an array, but
 * gives the option to choose how the comparison is done - case-sensitive or case-insensitive
 */
public static function inArray($needle, $haystack, $case = 'case-sensitive', $strict = false)
{
    switch ($case) {
        default:
        case 'case-sensitive':
        case 'cs':
            return in_array($needle, $haystack, $strict);
            break;
        case 'case-insensitive':
        case 'ci':
            if (is_array($needle)) {
                return in_array(self::arrayToLower($needle), self::arrayToLower($haystack), $strict);
            } else {
                return in_array(self::toLower($needle), self::arrayToLower($haystack), $strict);
            }
            break;
    }
}
}
回答7
/**
 * in_array function variant that performs case-insensitive comparison when needle is a string.
 *
 * @param mixed $needle
 * @param array $haystack
 * @param bool $strict
 *
 * @return bool
 */
function in_arrayi($needle, array $haystack, bool $strict = false): bool
{

    if (is_string($needle)) {

        $needle = strtolower($needle);

        foreach ($haystack as $value) {

            if (is_string($value)) {
                if (strtolower($value) === $needle) {
                    return true;
                }
            }

        }

        return false;

    }

    return in_array($needle, $haystack, $strict);

}


/**
 * in_array function variant that performs case-insensitive comparison when needle is a string.
 * Multibyte version.
 *
 * @param mixed $needle
 * @param array $haystack
 * @param bool $strict
 * @param string|null $encoding
 *
 * @return bool
 */
function mb_in_arrayi($needle, array $haystack, bool $strict = false, ?string $encoding = null): bool
{

    if (null === $encoding) {
        $encoding = mb_internal_encoding();
    }

    if (is_string($needle)) {

        $needle = mb_strtolower($needle, $encoding);

        foreach ($haystack as $value) {

            if (is_string($value)) {
                if (mb_strtolower($value, $encoding) === $needle) {
                    return true;
                }
            }

        }

        return false;

    }

    return in_array($needle, $haystack, $strict);

}
回答8

我编写了一个简单的函数来检查下面代码中的数组中的不敏感值。

功能:

function in_array_insensitive($needle, $haystack) {
   $needle = strtolower($needle);
   foreach($haystack as $k => $v) {
      $haystack[$k] = strtolower($v);
   }
   return in_array($needle, $haystack);
}

如何使用:

$array = array('one', 'two', 'three', 'four');
var_dump(in_array_insensitive('fOUr', $array));
回答9
$a = [1 => 'funny', 3 => 'meshgaat', 15 => 'obi', 2 => 'OMER'];  

$b = 'omer';

function checkArr($x,$array)
{
    $arr = array_values($array);
    $arrlength = count($arr);
    $z = strtolower($x);

    for ($i = 0; $i < $arrlength; $i++) {
        if ($z == strtolower($arr[$i])) {
            echo "yes";
        }  
    } 
};

checkArr($b, $a);
回答10
$user_agent = 'yandeX';
$bots = ['Google','Yahoo','Yandex'];        
        
foreach($bots as $b){
     if( stripos( $user_agent, $b ) !== false ) return $b;
}
回答11
  • in_array接受以下参数:in_array(search,array,type)
  • 如果搜索参数是字符串并且类型参数设置为TRUE,则搜索区分大小写。
  • 因此,为了使搜索忽略大小写,像这样使用它就足够了:

$ a = array('一个','两个','三个','四个');

$ b = in_array('ONE',$ a,false);

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何检查数组是否在php中包含特定值?(How can I check if an array contains a specific value in php?)
    问题 我有一个Array类型的PHP变量,我想找出它是否包含特定值,并让用户知道它在那里。 这是我的数组: Array ( [0] => kitchen [1] => bedroom [2] => living_room [3] => dining_room) 我想做些类似的事情: if(Array contains 'kitchen') {echo 'this array contains kitchen';} 做到上述目的的最佳方法是什么? 回答1 使用in_array()函数。 $array = array('kitchen', 'bedroom', 'living_room', 'dining_room'); if (in_array('kitchen', $array)) { echo 'this array contains kitchen'; } 回答2 // Once upon a time there was a farmer // He had multiple haystacks $haystackOne = range(1, 10); $haystackTwo = range(11, 20); $haystackThree = range(21, 30); // In one of these haystacks he lost a needle
  • in_array()和多维数组(in_array() and multidimensional array)
    问题 我使用in_array()来检查数组中是否存在值,如下所示, $a = array("Mac", "NT", "Irix", "Linux"); if (in_array("Irix", $a)) { echo "Got Irix"; } //print_r($a); 但是多维数组(下)如何处理-如何检查该值是否存在于多维数组中? $b = array(array("Mac", "NT"), array("Irix", "Linux")); print_r($b); 还是在涉及多维数组时不应该使用in_array() ? 回答1 in_array()在多维数组上不起作用。 您可以编写一个递归函数来为您做到这一点: function in_array_r($needle, $haystack, $strict = false) { foreach ($haystack as $item) { if (($strict ? $item === $needle : $item == $needle) || (is_array($item) && in_array_r($needle, $item, $strict))) { return true; } } return false; } 用法: $b = array(array("Mac", "NT"), array("Irix"
  • 检查字符串是否包含数组中的值[重复](Check if string contains a value in array [duplicate])
    问题 这个问题已经在这里有了答案: 字符串包含数组中的所有项目(不区分大小写) (10个答案) 上个月关闭。 我正在尝试检测一个字符串是否包含至少一个存储在数组中的URL。 这是我的数组: $owned_urls = array('website1.com', 'website2.com', 'website3.com'); 该字符串由用户输入并通过PHP提交。 在确认页面上,我想检查输入的URL是否在数组中。 我尝试了以下方法: $string = 'my domain name is website3.com'; if (in_array($string, $owned_urls)) { echo "Match found"; return true; } else { echo "Match not found"; return false; } 无论输入什么,返回值始终为“找不到匹配项”。 这是正确的做事方式吗? 回答1 尝试这个。 $string = 'my domain name is website3.com'; foreach ($owned_urls as $url) { //if (strstr($string, $url)) { // mine version if (strpos($string, $url) !== FALSE) { // Yoshi
  • 字符串包含数组中的所有项目(不区分大小写)(String contains any items in an array (case insensitive))
    问题 如何检查$string包含数组中表示的任何项目? $string = 'My nAmE is Tom.'; $array = array("name","tom"); if(contains($string,$array)) { // do something to say it contains } 有任何想法吗? 回答1 那是你想要的吗? 我希望代码正在编译:) $string = 'My nAmE is Tom.'; $array = array("name","tom"); if(0 < count(array_intersect(array_map('strtolower', explode(' ', $string)), $array))) { //do sth } 回答2 我认为没有内置函数可以处理您想要的内容。 您可以轻松地编写一个contains()函数,但是: function contains($str, array $arr) { foreach($arr as $a) { if (stripos($str,$a) !== false) return true; } return false; } 回答3 使用接受的答案: $string = 'My nAmE is Tom.'; $array = array("name","tom"); if(0 <
  • 在PHP中,是否存在将变量与多个值进行比较的简便方法?(In PHP, is there a short way to compare a variable to multiple values?)
    问题 基本上我想知道是否有一种方法可以缩短这样的事情: if ($variable == "one" || $variable == "two" || $variable == "three") 这样就可以针对多个值测试该变量或将其与多个值进行比较,而无需每次都重复该变量和运算符。 例如,与此类似的事情可能会有所帮助: if ($variable == "one" or "two" or "three") 或任何会减少打字的内容。 回答1 in_array()是我使用的 if (in_array($variable, array('one','two','three'))) { 回答2 无需构造数组: if (strstr('onetwothree', $variable)) //or case-insensitive => stristr 当然,从技术上讲,如果变量为twothr ,则此方法将返回true,因此添加“定界符”可能很方便: if (stristr('one/two/three', $variable))//or comma's or somehting else 回答3 $variable = 'one'; // ofc you could put the whole list in the in_array() $list = ['one','two'
  • xpath中不区分大小写的匹配?(case-insensitive matching in xpath?)
    问题 例如,对于下面的xml <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD title="EMPIRE BURLESQUE"/> <CD title="EmPiRe BuRLeSQuE"/> <CD title="Others"/> <CATALOG> 如何用xpath匹配前4条记录,例如//CD[@title='empire burlesque'] 。 有xpath函数可以做到这一点吗? 还接受其他解决方案,例如PHP函数。 回答1 XPath 2具有小写(和大写)字符串功能。 这与不区分大小写的代码不太一样,但是希望它足够接近: //CD[lower-case(@title)='empire burlesque'] 如果您使用的是XPath 1,则有一个使用翻译的技巧。 回答2 matchs()是XPATH 2.0函数,允许不区分大小写的正则表达式匹配。 标志之一是i ,表示不区分大小写的匹配。 以下XPATH使用match()函数以及不区分大小写的标志: //CD[matches(@title,'empire burlesque','i')] 回答3 这在Chrome Developer工具中无法找到元素,我正在寻找屏幕上的“提交”按钮 //input[matches(
  • JavaScript等同于PHP的in_array()(JavaScript equivalent of PHP's in_array())
    问题 JavaScript中有没有一种方法可以比较一个数组中的值并查看它是否在另一个数组中? 类似于PHP的in_array函数? 回答1 不,它没有一个。 因此,大多数流行的库在其实用程序包中都附带一个库。 查看jQuery的inArray和Prototype的Array.indexOf的示例。 jQuery的实现就像您期望的那样简单: function inArray(needle, haystack) { var length = haystack.length; for(var i = 0; i < length; i++) { if(haystack[i] == needle) return true; } return false; } 如果您要处理大量的数组元素,那么上面的技巧就可以很好地解决问题。 编辑:哎呀。 我什至没有注意到您想查看一个数组是否在另一个数组中。 根据PHP文档,这是PHP in_array的预期行为: $a = array(array('p', 'h'), array('p', 'r'), 'o'); if (in_array(array('p', 'h'), $a)) { echo "'ph' was found\n"; } if (in_array(array('f', 'i'), $a)) { echo "'fi' was found\n"
  • PHP的Big-O列表(List of Big-O for PHP functions)
    问题 在使用PHP一段时间之后,我注意到并不是所有内置的PHP函数都能达到预期的速度。 考虑函数的这两种可能的实现,该函数使用缓存的素数数组查找数字是否为素数。 //very slow for large $prime_array $prime_array = array( 2, 3, 5, 7, 11, 13, .... 104729, ... ); $result_array = array(); foreach( $prime_array => $number ) { $result_array[$number] = in_array( $number, $large_prime_array ); } //speed is much less dependent on size of $prime_array, and runs much faster. $prime_array => array( 2 => NULL, 3 => NULL, 5 => NULL, 7 => NULL, 11 => NULL, 13 => NULL, .... 104729 => NULL, ... ); foreach( $prime_array => $number ) { $result_array[$number] = array_key_exists( $number, $large
  • PHP in_array()/ array_search()奇怪的行为(PHP in_array() / array_search() odd behaviour)
    问题 我在使用PHP函数in_array()时发现了一些奇怪的行为。 我有一个像这样的数组: $arr = [TRUE, "some string", "something else"]; 现在,如果我要检查数组中是否包含"test" ,则显然不是,但是in_array()仍返回TRUE,这是为什么呢? $result = in_array("test", $arr); var_dump($result); //Output: bool(true) 使用array_search()时array_search()发生相同的事情: $result = array_search("test", $arr); var_dump($result); //Output: int(0) 我认为也许数组中的值TRUE会自动导致该函数为每个结果返回TRUE,而不检查数组的其余部分,但是我找不到任何文档来表明这种非常奇怪的功能。 回答1 in_array()和array_search()函数的这种行为不是错误,而是有据可查的行为。 这两个函数都有一个名为$strict的第三个可选参数,默认情况下为FALSE: bool in_array(混合$ needle,array $ haystack [,bool $ strict = FALSE] ) 混合array_search(混合$ needle,数组
  • case-insensitive array_unique
    I'm trying to write a few lines of code to make a case insensitive array unique type function. Here's what I have so far: foreach ($topics as $value) { $lvalue = strtolower($value); $uvalue = strtolower($value); if (in_array($value, $topics) == FALSE || in_array($lvalue, $topics) == FALSE || in_array($uvalue, $topics) == FALSE) { array_push($utopics, $value); } } The trouble is the if statement. I think there's something wrong with my syntax, but I'm relatively new to PHP and I'm not sure what it is. Any help?
  • 如何使用PHP创建简单的搜寻器? [关闭](How do I make a simple crawler in PHP? [closed])
    问题 关门了。 这个问题需要更加集中。 它当前不接受答案。 1年前关闭。 已锁定。 该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。 它目前不接受新的答案或互动。 我有一个带有一堆链接的网页。 我想编写一个脚本,将那些链接中包含的所有数据转储到本地文件中。 有没有人用PHP做到这一点? 一般准则和陷阱就可以作为答案。 回答1 嗯不要用正则表达式解析HTML。 这是受Tatu启发的DOM版本: <?php function crawl_page($url, $depth = 5) { static $seen = array(); if (isset($seen[$url]) || $depth === 0) { return; } $seen[$url] = true; $dom = new DOMDocument('1.0'); @$dom->loadHTMLFile($url); $anchors = $dom->getElementsByTagName('a'); foreach ($anchors as $element) { $href = $element->getAttribute('href'); if (0 !== strpos($href, 'http')) { $path = '/' . ltrim($href, '/'); if
  • 如何检查数组值是否存在?(How to check if an array value exists?)
    问题 如何检查$something['say']的值是否为'bla'或'omg' ? $something = array('say' => 'bla', 'say' => 'omg'); 回答1 使用指令if ? if(isset($something['say']) && $something['say'] === 'bla') { // do something } 顺便说一句,你是分配与键的值say的两倍,因此您的阵列将导致数组只有一个值。 回答2 您可以使用PHP in_array函数 if( in_array( "bla" ,$yourarray ) ) { echo "has bla"; } 回答3 使用: in_array() $search_array = array('user_from','lucky_draw_id','prize_id'); if (in_array('prize_id', $search_array)) { echo "The 'prize_id' element is in the array"; } 输出为: The 'prize_id' element is in the array 使用: array_key_exists() $search_array = array('user_from','lucky_draw_id'
  • 什么更快:in_array或isset? [关闭](what is faster: in_array or isset? [closed])
    问题 从目前的情况来看,这个问题不适合我们的问答形式。 我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。 如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 这个问题对我来说只是个问题,因为我一直喜欢编写优化的代码,这些代码也可以在廉价的慢速服务器(或具有大量流量的服务器)上运行 我环顾四周,却找不到答案。 我想知道在这两个示例之间有什么更快的方法,请记住在我的情况下数组的键并不重要(自然是伪代码): <?php $a = array(); while($new_val = 'get over 100k email addresses already lowercased'){ if(!in_array($new_val, $a){ $a[] = $new_val; //do other stuff } } ?> <?php $a = array(); while($new_val = 'get over 100k email addresses already lowercased'){ if(!isset($a[$new_val]){ $a[$new_val] = true; //do other stuff } } ?> 因为问题的关键不是数组冲突,所以我想补充一点,如果您担心$a[$new
  • PHP If语句具有多个条件(PHP If Statement with Multiple Conditions)
    问题 我有一个变量$var 。 如果$var等于以下任何值abc , def , hij , klm或nop ,我想要echo "true" 。 有没有一种方法可以通过&& ??之类的单个语句来完成? 回答1 if($var == "abc" || $var == "def" || ...) { echo "true"; } 我认为,使用“或”代替“与”会有所帮助 回答2 一种优雅的方法是动态构建数组并使用in_array() : if (in_array($var, array("abc", "def", "ghi"))) switch语句也是一种选择: switch ($var) { case "abc": case "def": case "hij": echo "yes"; break; default: echo "no"; } 回答3 您可以使用php的in_array函数 $array=array('abc', 'def', 'hij', 'klm', 'nop'); if (in_array($val,$array)) { echo 'Value found'; } 回答4 不知道,为什么要使用&& 。 有一个更简单的解决方案 echo in_array($var, array('abc', 'def', 'hij', 'klm', 'nop')) ? 'yes'
  • 在PHP中以上传形式检查文件扩展名(Check file extension in upload form in PHP [duplicate])
    问题 这个问题已经在这里有了答案: 如何在PHP中获得文件扩展名? (29个答案) 10个月前关闭。 我检查文件扩展名是否已上传。 我的示例方法有效,但是现在我需要了解我的方法(使用pathinfo )是否正确。 还有另一种更好更快的方法吗? $filename = $_FILES['video_file']['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if ($ext !== 'gif' || $ext !== 'png' || $ext !== 'jpg') { echo 'error'; } 回答1 使用if( $ext !== 'gif' )可能没有效率。 如果您允许20种不同的扩展名怎么办? 尝试: $allowed = array('gif', 'png', 'jpg'); $filename = $_FILES['video_file']['name']; $ext = pathinfo($filename, PATHINFO_EXTENSION); if (!in_array($ext, $allowed)) { echo 'error'; } 回答2 检查文件扩展名不是最佳实践。 完成此任务的首选方法是检查文件的MIME类型。 从PHP: <?php $finfo = finfo_open
  • 检查字符串是否包含数组中的单词[重复](Check if string contains word in array [duplicate])
    问题 这个问题已经在这里有了答案: 字符串包含数组中的所有项目(不区分大小写) (10个答案) 上个月关闭。 这是一个聊天页面。 我有一个$string = "This dude is a mothertrucker" 。 我有一个badwords数组: $bads = array('truck', 'shot', etc) 。 如何检查$string包含$bad中的任何单词? 到目前为止,我有: foreach ($bads as $bad) { if (strpos($string,$bad) !== false) { //say NO! } else { // YES! } } 除非我这样做,否则当用户在$bads列表中键入单词时,输出为NO! 其次是! 因此出于某种原因,代码会将其运行两次。 回答1 function contains($str, array $arr) { foreach($arr as $a) { if (stripos($str,$a) !== false) return true; } return false; } 回答2 1)最简单的方法: if ( in_array( 'three', ['one', 'three', 'seven'] )) ... 2)另一种方法(在检查数组是否指向另一个数组时): $keywords=array('one'
  • 如何从PHP中的数组中删除重复的值(How to remove duplicate values from an array in PHP)
    问题 如何从PHP中的数组中删除重复的值? 回答1 使用array_unique()。 例子: $array = array(1, 2, 2, 3); $array = array_unique($array); // Array is now (1, 2, 3) 回答2 使用array_values(array_unique($array)); array_unique :用于唯一数组array_values :用于重新索引 回答3 //Find duplicates $arr = array( 'unique', 'duplicate', 'distinct', 'justone', 'three3', 'duplicate', 'three3', 'three3', 'onlyone' ); $unique = array_unique($arr); $dupes = array_diff_key( $arr, $unique ); // array( 5=>'duplicate', 6=>'three3' 7=>'three3' ) // count duplicates array_count_values($dupes); // array( 'duplicate'=>1, 'three3'=>2 ) 回答4 唯一对我有用的是: $array = array
  • 生成范围内的唯一随机数(Generating UNIQUE Random Numbers within a range)
    问题 我需要在一定范围内生成随机的UNIQUE编号,该怎么办? 我可以通过生成随机数 generator: $arr = []; $x = rand($min, $max); $len = count($arr); $flag = 0; for($i = 0; $i < $len; $i++) { if ($flag === 1) goto generator; if ($x === $arr[$i]) $flag = 1; } $arr[$index] = $x; $index++; goto generator; 我知道这段代码不好,所以我需要一个更好的优化版本代码! 帮助 ! 例如:如果我需要在1到15之间生成3个数字,它们应该像5、9、1而不是3,1,2 [1-3(我要生成的数字)] 回答1 以随机顺序排列数字范围的数组: $numbers = range(1, 20); shuffle($numbers); 包装功能: function UniqueRandomNumbersWithinRange($min, $max, $quantity) { $numbers = range($min, $max); shuffle($numbers); return array_slice($numbers, 0, $quantity); } 例子: <?php print_r(
  • PHP数组如何在C级别上实现?(How is the PHP array implemented on the C level?)
    问题 PHP array是PHP的核心功能之一。 它是稀疏的,允许在同一数组中使用多类型键,并支持集合,字典,数组,堆栈/队列和迭代功能。 但是在使用PHP一段时间之后,我发现相当多的array_*函数比乍一看要慢得多。 就像在非常大的数组(10000+)上使用array_rand的情况一样。 实际上, array_rand是如此之慢,以至于在您将php数组用作索引数组的情况下,诸如rand( 0, array_length( $array ) - 1 )类的函数比array_rand运行速度更快。 现在到我的问题。 PHP数组如何在C级别上实现? 这对于预测大量使用PHP数组数据类型的不同功能的函数的Big O很有帮助。 回答1 PHP关联数组实际上是HashTables的实现。 在内部,可以制作数字数组或关联数组。 如果将它们组合在一起,则它是关联数组。 在数字数组中,它与C非常相似。您具有ZVAL结构的指针数组。 因为指针具有固定长度(我们称其为n),所以偏移(x)的计算很容易:x * n。 在PHP中,类型为ZVAL结构(因为它实现了动态类型),但它也有助于关联数组,因为您可以假定定长。 因此,即使直接访问数组的速度较慢,仍将其视为O(1)。 那么字符串键会发生什么呢? PHP使用哈希函数将其转换为整数。 在数字和关联数组中搜索具有相似的效率,因为在内部它们都是数字。
  • 如何使用PHP或JavaScript检测浏览器?(How can I detect the browser with PHP or JavaScript?)
    问题 如何检测用户是否未使用JavaScript或PHP使用任何浏览器Chrome,Firefox或Internet Explorer? 回答1 我发现在JS中执行此操作的最佳方法是在Quirksmode上。 我为PHP制作了一个,可以与常见的浏览器一起使用: $browser = array( 'version' => '0.0.0', 'majorver' => 0, 'minorver' => 0, 'build' => 0, 'name' => 'unknown', 'useragent' => '' ); $browsers = array( 'firefox', 'msie', 'opera', 'chrome', 'safari', 'mozilla', 'seamonkey', 'konqueror', 'netscape', 'gecko', 'navigator', 'mosaic', 'lynx', 'amaya', 'omniweb', 'avant', 'camino', 'flock', 'aol' ); if (isset($_SERVER['HTTP_USER_AGENT'])) { $browser['useragent'] = $_SERVER['HTTP_USER_AGENT']; $user_agent = strtolower(