如何在 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);
它将捕获搜索和任何字符,直到/然后是带点的数字。
您可以创建从数组中搜索的函数
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
我想获取客户端的浏览器详细信息。所以我正在使用 $_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);
它将捕获搜索和任何字符,直到/然后是带点的数字。
您可以创建从数组中搜索的函数
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