2017-05-23 9 views
0

小さなPHPスクリプトで問題が発生しました。PHP strpos()とstr_replace()

私のコードは、フォーラムソフトウェア(XenForoなど)のようにフォロー/アンフォローシステムとして機能するはずです。

私のスクリプトは、文字列内のユーザーを検索し、その名前が見つかった場合、その文字列内のユーザーの名前を削除します。しかし、私の問題は、文字列からカンマを削除しようとするため、何らかの理由でスクリプトが名前とカンマを検索できないことです。

すべてのヘルプは高く評価され、事前に感謝:)

ピーターはフランツとジョージ以下であるが、彼が望むジョージ

スクリプトをアンフォローします:

<?php 

$user1 = "Peter"; 
$following1 = "Franz, George"; 

$user2 = "Franz"; 
$following2 = "Peter, George"; 

$user3 = "George"; 
$following3 = "Peter, Franz"; 


// 
// 
// 

if (strpos($following1, $user3) == true) { 
    echo "Can remove follow."; 

    if (strpos($following1, ", $user3")) { 
     $user3 = ", $user3"; 
     $fNew = str_replace($user3, "", $following1); 
     echo "$fNew<br>"; 
    } else if (strpos($following1, "$user3, ")) { 
     $use3 = "$user3, "; 
     $fNew = str_replace("$user3", "", $following1); 
     echo "$fNew<br>"; 
    } 
} else if ($following1 == $user3) { 
    echo "Can remove follow."; 
    $fNew = str_replace($user3, "", $following1); 
    echo "$fNew<br>"; 
} else { 
    echo "Can't remove follow"; 
} 

?> 
+0

を働いていますか? – ThisGuyHasTwoThumbs

+2

問題は、このデータを最初にコンマ区切りの文字列として保存していることです。代わりに配列を使用する必要があります。データベースを使用してデータストレージを処理したい点になると、これは正しく_通常化されます。 – CBroe

+5

strposが見つかった文字列の位置を返すので、!== false、not == trueを使用してください。 –

答えて

2

が見て、このことがあります:

<?php 

$follow = "Peter, Franz, Spongebob"; 
$guyToUnfollow = 'Franz'; 

$people = explode(',', $follow); 
var_dump($people); 
foreach ($people as $key => $person) { 
    $person = trim($person); 
    if ($person == $guyToUnfollow) { 
     unset($people[$key]); 
    } 
} 

$follow = implode(',',$people); 

var_dump($follow); 

まず、我々はそれによって、ループ、配列にCSVに変換します。トリムを使用して空白を削除し、配列内でunfollowしたい人と一致する値をすべて解除します。最後に、implodeを使用してcsvを再作成します。

は、それが値==「文字列」カンマ区切り、その後解除して文字列を爆発ないなぜここhttps://3v4l.org/QEnHj

+0

私はそれを見ているように意味がありますので、あなたの助けをありがとう! – TheDusty01

+0

なぜin_arrayを使用しないのですか?あなたはこのためにforeachを使う必要はありません –

+0

Ok、それは配列Paulにあります。どのように設定を解除しますか? – delboy1978uk

0

strposは文字列の位置を返すので、真であるかどうかをチェックする代わりにfalseでないかどうかをチェックする必要があります。 だから、あなたが使用する必要があります。

strpos($following1, $user3) !== false 
+0

これは意味をなさないが、ユーザは単純にこの部分のニックネームを選んでこのシステムをハックすることができる別のユーザーのニックネーム。 – Adder

+1

私はちょうど質問に答えている、私はいつもより良いデータベースニックネームシステムを使用することに同意する –

+0

私はデータベースシステムを使用して、これはちょうど汚い 'それを試してみる'スクリプトだった。ありがとう、結構です! – TheDusty01