「この問題を解決するにはどうすればよいですか?」と尋ねる代わりに、「なぜこの問題が発生するのか?」から始める必要があります。
$user = "< img src='default.jpg' />John";
< img src='default.jpg' />John
ユーザー名ですか?なぜそれを1つとして使用するのですか?この背後には、次のような巧妙な考えがあると推測しています。関心の分離と呼ばれるコンピュータ サイエンスの大きな概念に戻ります. 画像は論理的にはユーザー名の一部ではないため, 1 つの画像として保存しないでください. 常に一緒に表示する場合は, 関数を使用してユーザー名を表示できます.画像をユーザー名の一部にすることなく、標準的な方法で情報を取得します。
まず、名前から画像を削除します。これを別々に保管する方法はいくつかあります。
クラスを使用することをお勧めします:
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();
少し怠惰になりたい場合は「配列」を使用できますが、クラスの優れた機能(これらの関数など)が失われるため、一般的なケースではお勧めしません。
$user = array(
name => "john",
image => "<img src='default.jpg' />";
);
echo $user["image"] . $user["name"];
データベース(使用している場合)で、それらを別々の列にしてから、上記のデータ構造のいずれかを使用します。
これで、ユーザー名がforeach ループを使用して特定のリストにあるかどうかを簡単に確認できます。
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 を書いていません..