web-dev-qa-db-ja.com

jdatabase:$ X文字列と一致しない文字列の一部を見つける

Mysqlクエリをいくつか使用して、J-databaseテーブルからstringsとしてデータを取得します。次に、別の文字列と一致しないその文字列の部分を見つける必要があります(これは実際にはメイン文字列のサブ文字列です)。少し混乱しますが、以下の例では理解しやすくなります。

メイン文字列23/CSE/4/2014

サブストリング/CSE/4/2014

必要な出力23

Joomlaコーディング標準によると、これを達成するための最良の方法は何でしょうか?

2
saibbyweb

文字列が常にスラッシュで区切られていて、最初の値を取得したい場合は、次のように配列に分解できます。

$string = '23/CSE/4/2014';
$array = explode('/', $string);

echo $array[0]; // 23
echo $array[1]; // CSE
echo $array[2]; // 4
echo $array[3]; // 2014
1
Lodder

入力文字列の可変性に関する詳細を提供していないため、直面する可能性のある課題のみを想定できます。

Sub_stringが常に分離する値の右側にある場合は、次のようになります。

デモ

_$main_string = "23/CSE/4/2014";
$sub_string = "/CSE/4/2014";
echo str_replace($sub_string, '', $main_string);
// 23
_

分離する値がsub_stringのどちらかの側に存在する可能性がある場合は、これが機能します。

デモ

_$main_string = "23/CSE/4/2014";  // or "CSE/4/2014/23"
$sub_string = "CSE/4/2014";  // notice no leading/trailing slash on this value
echo trim(str_replace($sub_string, '', $main_string), '/');  // leading/trailing slashes are trimmed
// 23
_

分離する値がサブストリングのスラッシュで区切られた値の中にネストされている可能性がある場合は、より複雑な問題に対処する必要があり、データのフォーマットについて再考する必要があります。

Main_stringとsub_stringを分解してから、反復比較(またはarray_diff()呼び出し)を行って個々の値をフィルターに掛けると、強引な処理が行われたり、破損する可能性があります。目的の値がスラッシュで区切られたsub_string値の1つと同じである場合、検索しようとしているものが失われます。

pSこの質問には何らかの理由でmysqlがタグ付けされているため、最初のスニペットと同等のMySQLを提供します。

デモ

_SELECT REPLACE('23/CSE/4/2014', '/CSE/4/2014', '')
// 23
_
0
mickmackusa