web-dev-qa-db-fra.com

Jdatabase: recherche d'une partie de la chaîne qui ne correspond pas à la chaîne $ X

J'utilise des requêtes mysql pour récupérer les données d'une table Jdatabase sous la forme chaînes. Maintenant, je dois trouver la partie de cette chaîne qui ne correspond pas à une autre chaîne ( qui est en fait une sous-chaîne de la chaîne principale ). C'est un peu déroutant, mais l'exemple ci-dessous le rendra facile à comprendre.

Chaîne principale: 23/CSE/4/2014

Sous-chaîne: /CSE/4/2014

Sortie requise : 23

Selon les normes de codage Joomla, quel serait le meilleur moyen d’y parvenir?

2
saibbyweb

Si la chaîne sera toujours séparée par des barres obliques et que vous voulez obtenir la première valeur, vous pourriez exploser dans un tableau comme ceci:

$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

Vous n’avez fourni aucun détail sur la variabilité de vos chaînes d’entrée, nous ne pouvons donc que supposer les difficultés que vous pourriez rencontrer.

Si votre sous-chaîne est toujours du côté droit de la valeur que vous souhaitez isoler, alors ceci fera:

démo

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

Si la valeur à isoler peut exister de part et d'autre de la sous-chaîne, le travail sera alors fait:

démo

$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

Si la valeur à isoler peut être imbriquée à l'intérieur des valeurs délimitées par une barre oblique de la sous-chaîne, vous devrez faire face à un défi plus compliqué et repenser le formatage des données peut être dans l'ordre.

Exploser votre chaîne principale et chaîne secondaire, puis effectuer des comparaisons itérées (ou un appel array_diff()) pour filtrer les valeurs individuelles va être lourd et/ou potentiellement dommageable. Si la valeur souhaitée est identique à l'une des valeurs délimitées par une barre oblique de sub_string, vous perdrez ce que vous essayez de trouver.

p.s. Puisque cette question est taguée avec mysql pour une raison quelconque, je vais proposer l'équivalent MySQL de mon premier extrait:

démo

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