有没有办法在PHP中匹配数组中字符串的一部分?
我想针对允许的IP验证用户IP。因此,我创建了一个包含IP和相应的partner_id的数组。这是有效的,但是我也想允许整个子网,因此需要对阵列的一部分。这可能吗?
这是我的代码:
# define partner IPs
$partner_ips = array(
'192.168.56.1' => 0, // dev
'192.168.57.*' => 1 // office ips
);
# test for partner IP and associate partner_id if found
if (array_key_exists($_SERVER['REMOTE_ADDR'], $partner_ips))
$partner_id = $partner_ips[$_SERVER['REMOTE_ADDR']];
else
$partner_id = false;
感谢您对此提供任何帮助。
答案 0 :(得分:1)
首先检查ip格式。构建两个不同的阵列,一个用于完整ip地址,另一个用于子网。一个示例类(随意使其符合PSR-2,因为您使用PHP 5.6,您也可以将两个数组声明为类常量而不是静态变量):
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_splash);
LinearLayout mL = (LinearLayout)findViewById(R.id.MainLayout);
Display display = getWindowManager().getDefaultDisplay();
Point size = new Point();
display.getSize(size);
int width = size.x;
int height = size.y;
if (Build.VERSION.SDK_INT >= 16) {
Drawable d = new BitmapDrawable(getResources(),
BitmapDecoder.decodeSampledBitmapFromResource(getResources(),
R.drawable.andromeda,
1080,1920));
mL.setBackground(d);
}
this.getSupportActionBar().hide();
}
你可以像这样使用它:
class RemoteAddress {
private $ip;
private $id;
private static $partners_ips = [
'192.168.56.1' => 0,
'192.168.58.4' => 2,
'192.168.59.2' => 3 ];
private static $partners_subnets = [ // note that subnets must end with a dot
'192.168.57.' => 1,
'192.168.60.' => 4,
'192.168.61.' => 5 ];
public function __construct($ip) {
if (filter_var($ip, FILTER_VALIDATE_IP) === false)
throw new Exception("invalid IP address");
$this->ip = $ip;
$this->id = $this->searchID();
}
public function getIDPartner() {
return $this->id;
}
private function searchID() {
if (array_key_exists($this->ip, self::$partners_ips))
return self::$partners_ips[$this->ip];
foreach (self::$partners_subnets as $subnet => $id) {
if (strpos($this->ip, $subnet) === 0)
return $id;
}
return false;
}
}
答案 1 :(得分:0)
您可以使用in_array检查字符串是否存在于数组中