我有一组人在html文件中注册为在线。我正在使用它,以便每个人都可以分配一个图像。但是在检查是否已使用名称时,in_array函数返回false并允许脚本继续。
$user = "< img src='default.jpg' />John";
$explode = array("<img src='tress.jpg' />John");
if(in_array($user, $explode))
{
//show login script if user exists
}
else
{
//continue to script
}
现在这不起作用的原因是因为数组中的john与$ user中的john不同。无论如何检查数组中是否存在该名称?在回复时请解释。
答案 0 :(得分:4)
而不是问“我如何解决这个问题?”,你需要先说“为什么我遇到这个问题?”
$user = "< img src='default.jpg' />John";
< img src='default.jpg' />John
是用户名吗?你为什么用它呢?我猜这背后有一些聪明的想法,“好吧,我总是用他们的名字显示用户的图像,所以我只是使图像成为他们名字的一部分。这是导致问题远远超过它解决的问题。这又回到了计算机科学中一个名为separation of concerns的大概念。图像不是逻辑上用户名的一部分,所以不要将其存储为。如果您始终将它们一起显示,则可以使用函数以标准方式显示用户的信息,而不会将图像作为用户名的一部分。
首先,从名称中删除图像。有几种方法可以单独存储它。
我建议使用a class:
class User {
public $name;
public $imageSource;
// The following functions are optional, but show how a class
// can be useful.
/**
* Create a user with the given name and URL to their image
*/
function __construct($name, $imageSource) {
$this->name = $name;
$this->imageSource = $imageSource;
}
/**
* Gets the HTML to display a user's image
*/
function image() {
return "<img src='". $this->imageSource ."' />";
}
/**
* Gets HTML to display to identify a user (including image)
*/
function display() {
return $this->image() . $this->name;
}
}
$user = new User("john", "default.jpg");
// or without the constructor defined
//$user = new User();
//$user->name = "john";
//$user->imageSource = "default.jpg";
echo $user->display();
如果你想变得更懒,你可以使用"array",但我不建议在一般情况下使用它,因为你失去了类的酷功能(比如那些功能):
$user = array(
name => "john",
image => "<img src='default.jpg' />";
);
echo $user["image"] . $user["name"];
在您的数据库中(如果您正在使用),请将它们分开,然后使用上述数据结构之一。
现在您已经拥有了这个,使用foreach loop很容易看出用户名是否在给定列表中:
function userNameInList($user, $users) {
for($users as $current) {
if($user->name == $current) {
return true;
}
}
return false;
}
$newUser = new User("John", "john.jpg");
$currentUsers = array("John", "Mary", "Bob");
if(userNameInList($newUser, $currentUsers) {
echo "Sorry, user name " . $newUser->name . " is already in use!";
}
如果您是PHP新手,可以更容易理解正常的for
循环:
function userNameInList($user, $users) {
for($i = 0; $i < count($users); ++i) {
$current = $users[$i];
if($user->name == $current) {
return true;
}
}
return false;
}
如果其中任何一个没有运行,请告诉我,我不再经常写PHP了..