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?
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
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:
$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:
$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:
SELECT REPLACE('23/CSE/4/2014', '/CSE/4/2014', '')
// 23