如何在 php 中搜索其值的前 3 个字符的数组

How to search array with first 3 character of its value in php

我想获取客户端的浏览器详细信息。所以我正在使用 $_SERVER['HTTP_USER_AGENT'] 来获取详细信息,但它也会获取一些额外的信息,比如

Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36

在 chrome 浏览器中。我所做的是将字符串转换为数组,如

Array ( [0] => Mozilla/5.0 [1] => (Windows [2] => NT [3] => 10.0; [4] => Win64; [5] => x64) [6] => AppleWebKit/537.36 [7] => (KHTML, [8] => like [9] => Gecko) [10] => Chrome/60.0.3112.90 [11] => Safari/537.36 )

如果我搜索 Chr -- 我希望它搜索数组 return Chrome/60.0.3112.90 .

请提出解决方案,谢谢。

代码:

echo $browser = $_SERVER['HTTP_USER_AGENT'];


$strArray = explode(' ',$browser);

print_r($strArray);

您将用户代理转换为数组的方式非常错误,例如 "Windows NT" 变成了 ['Windows','NT'] 而这不是您想要的.

您可能希望使用 ua-parser 以更好的方式提取用户代理信息。

require_once 'vendor/autoload.php';
use UAParser\Parser;

$ua = "Mozilla/5.0 (Macintosh; Intel Ma...";

$parser = Parser::create();
$result = $parser->parse($ua);

print $result->ua->family;            // Safari
print $result->ua->major;             // 6
print $result->ua->minor;             // 0
print $result->ua->patch;             // 2
print $result->ua->toString();        // Safari 6.0.2
print $result->ua->toVersion();       // 6.0.2

print $result->os->family;            // Mac OS X
print $result->os->major;             // 10
print $result->os->minor;             // 7
print $result->os->patch;             // 5
print $result->os->patchMinor;        // [null]
print $result->os->toString();        // Mac OS X 10.7.5
print $result->os->toVersion();       // 10.7.5

print $result->device->family;        // Other

print $result->toString();            // Safari 6.0.2/Mac OS X 10.7.5
print $result->originalUserAgent;     // Mozilla/5.0 (Macintosh; Intel Ma...

您可以在字符串上使用正则表达式。

$str = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36";

$search = "Chr";
Preg_match("/". $search . ".*?\/\d+\.\d+\.\d+\.\d+/", $str, $match);

Var_dump($match);

它将捕获搜索和任何字符,直到/然后是带点的数字。

https://3v4l.org/uYpoP

您可以创建从数组中搜索的函数

echo $browser = $_SERVER['HTTP_USER_AGENT'];


$strArray = explode(' ',$browser);

print_r($strArray);
function search_from_array($array,$string)
{
  $return_str = "";
  foreach ($array as $key => $value) {
    $pos = stripos($value, $string);
    if($pos !== false)
      $return_str=$value;
  }
  return $return_str;
}

echo search_from_array($strArray,"chr");

由于需要搜索评论中写的 OS,接受的答案将无法正常工作。
@Nabils 的答案会很好用,但由于它将字符串分成非常小的部分,因此可能难以使用。

我想我可以使用 preg_split 并创建一个很好的搜索数组,我想我做到了。
我不知道用户代理的所有变体,但它们似乎遵循一种模式。

这将在 space 上拆分,但也会在 () 上拆分。

$input_line = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36";
$arr = preg_split("/( \()|(\) )/", $input_line);

$arr2 =explode(" ", end($arr)); // explode "Chrome/60.0.3112.90 Safari/537.36" on space
Unset($arr[count($arr)-1]); // remove above exploded
$arr = Array_merge($arr,$arr2); // reinsert them as two items
//Var_dump($arr);

$search = "Chr";

Foreach($arr as $val){
    If($search == Substr($val,0,3)) echo $val;
}

在这里查看它是如何工作的:https://3v4l.org/qF65g