-3

私のmysqlテーブルには、次のようなデータを格納する列があります。

'fb:username;yt:youtubeUsername;tw:twitterUsername;uk:websiteURL'

すべての値は「;」で区切られます。私が知りたいのは、この配列の値を削除する方法 (ユーザーが YouTube アカウントのリンクを削除したいなど)、explode 関数を使用してフィールドを検索し、行から値をきれいに削除する方法です。

混乱していないことを願っています。

        $social = explode(";", $arrayquery['socialNetworks']);
        $count = substr_count($arrayquery['socialNetworks'], ';') + 1;

        for($i = 0; $i < $count; $i++) { 
            # Seperate data so we can read it
            $prefix = substr($social[$i], 0, 2);
            $url = strstr($social[$i], ':');
            $url = substr($url, 1); # Remove : from resources

 { my script I need to run in For loop. }
        }

これは、フィールドからデータを抽出するために使用するスクリプトです。

4

2 に答える 2

0

「取り除く」とはどういう意味ですか?文字列から特定のネットワークを削除したいということですか、それともネットワークが文字列にまだ存在している間にネットワークの値だけを削除したいということですか。とにかく、これらの問題の両方に対する解決策は次のとおりです。

$arrayquery['socialNetworks'] = 'fb:username;yt:youtubeUsername;tw:twitterUsername;uk:websiteURL';
$networks   = explode_networks( $arrayquery['socialNetworks'] );

//Uncomment this print_r to see what $networks looks like
//print_r( $networks );

//here you have the choice:
//To set the value of Twitter account (for example) to an empty string  

$networks['tw'] = '';

//or if you want to remove twitter from the list of networks, remove the above line and uncomment the below one
//unset( $networks['tw'] );

$networks   = implode_networks( $networks );

//See how your string looks like
//echo $networks    



//Functions

function explode_networks( $networks ) {
    $networks = array_filter( explode( ';' , $networks ) );
    $return = array( );
    foreach( $networks as $netw ) {
        list( $nw , $data ) = explode( ':' , $netw );
        $return[$nw] = $data;
    }
    return $return;
}

function implode_networks( $networks ) {
    $return = array( );
    foreach( $networks as $nw => $data ) {
        $return[] = $nw . ':' . $data;
    }
    return implode( ';' , $return );
}

それが役に立てば幸い。

于 2013-04-28T17:36:06.210 に答える
0

データベースの機能をまったく使用しません。

最も簡単なのは、たとえば次のようなテーブルを持つことです。

id    facebook    youtube            twitter            uk
1     username    youtubeUsername    twitterUsername    http://stackoverflow.com

一度に 1 つの列だけを更新するのは簡単な作業です。例:UPDATE table SET youtube = "" WHERE id = 1;

簡単ですが、より多くの「種類」の情報が必要な場合は、テーブル スキーマを更新する必要があります。これをより柔軟にすることができます:

表1

id    `othercolumrelatedtouser`
1     'otherdata'

表 2

id    table1ID    tag         value
1     1           facebook    username
2     1           youtube     youtubeUsername
3     1           twitter     twitterUsername
4     1           url         http://stackoverflow.com

これで、次のようなものを使用できるようになりますDELETE FROM Table2 WHERE table1ID = 1 AND tag = "youtube";

于 2013-04-28T16:00:07.867 に答える