COMPARACIÓ DE CADENES PHP

 

Quan haguem de comparar cadenes en PHP, es recomana fer ús de les funcions natives del llenguatge previstes per a això. Si es tracten de fer comparacions utilitzant l'operador == es poden obtenir resultats estranys. Utilitza l'operador === pot donar millors resultats, però en general tractarem d'usar funcions com strcmp previstes específicament per a això.

 

 

FUNCIÓ strcmp

Aquesta funció realitza la comparació segura de Strings i retorna un valor numèric. La seva sintaxi habitual és la següent:

if (strcmp ($cadena1, $cadena2) == 0) {...}

strcmp és sensible a majúscules i minúscules, és a dir, no considera igual dimarts que dimarts.

La funció retorna un valor numèric que pot ser:

0: quan les dues cadenes són iguals. En cas contrari el valor retornat és diferent de zero, per la qual cosa si volem saber si dues cadenes són diferents podem fer servir if (strcmp ($cadena1, $cadena2)! == 0) {...}

Un valor numèric menor que 0 si la cadena 1 és menor que la cadena 2

Un valor numèric més gran que zero si la cadena 2 és més gran que la cadena 1.

 

Què vol dir que una cadena sigui més gran que una altra? La comparació es fa en funció dels codis numèrics equivalents de cada caràcter. Per exemple la lletra A té codi numèric 65 i la lletra a codi numèric 97. A causa que els codis numèrics no permeten una ordenació alfabètica precisa (en no ordenar correctament majúscules i minúscules, paraules amb accent, caràcters com la ñ, etc.) , aquest no és un bon mitjà per ordenar alfabèticament paraules i només té una utilitat limitada.

Els paràmetres aportats a la funció han de ser Strings. En cas que algun paràmetre no sigui una cadena de text, el resultat que retorna la funció pot ser impredictible.

Escriu aquest codi i visualitza els resultats que produeix:

<Charset meta = "UTF-8">

<? Php // Exemples curs PHP

$cadena1='1e3'; $cadena2='1000';

if($cadena1==$cadena2) {echo 'Segons == les dues cadenes són iguals';}

else {echo 'Segons == les dues cadenes NO són ​​iguals'; }

echo '<br/>';

if($cadena1 === $cadena2) {echo 'Segons === les dues cadenes són iguals';}

else {echo 'Segons === les dues cadenes NO són ​​iguals'; }

echo '<br/>';

if(strcmp($cadena1,$cadena2) == 0) {echo 'Segons strcmp les dues cadenes són iguals';}

else {echo 'Segons strcmp les dues cadenes NO són ​​iguals'; }

?>

El resultat serà similar a aquest: Segons == les dues cadenes són iguals, segons === les dues cadenes NO són ​​iguals, segons strcmp les dues cadenes NO són ​​iguals.

Recordeu que per fer comparacions segures de cadenes de text farem servir strcmp o una altra funció PHP prevista per a això en lloc dels operadors == o ===.

 

ALTRES FUNCIONS PER COMPARAR CADENES AMB PHP

PHP defineix altres funcions natives per comparar de cadenes de text. Anem a veure algunes d'elles:

FUNCIÓ

UTILITAT

EXEMPLES aprenderaprogramar.com

strcasecmp($cadena1, $cadena2)

Retorna com a resultat 0 si les dues cadenes són iguals, o un valor numèric menor o major de zero en cas contrari. No diferencia entre majúscules i minúscules.

$cadena1='dimarts';

$cadena2='Dimarts';

strcasecmp($cadena1, $cadena2)

// Retorna 0, són iguals

strncmp($cadena1, $cadena2, $numCaract)

Compara el nombre de caràcters numCaract entre la cadena 1 i la cadena 2 tenint en compte majúscules i minúscules com diferents.

$cadena1='dimarts';

$cadena2="Dimarts de fira ';

strncmp($cadena1, $cadena2, 6) == 0

// Retorna false, no són iguals

strncasecmp($cadena1, $cadena2, $numCaract)

Compara el nombre de caràcters numCaract entre la cadena 1 i la cadena 2 sense tenir en compte majúscules i minúscules.

$cadena1='dimarts';

$cadena2="Dimarts de fira';

strncasecmp($cadena1, $cadena2, 6)

// Retorna 0, són iguals

substr_compare($cadena1, $cadena2, $posicionCad1, $opcLongitud, $opcBoolDiferencia)

Compara una subcadena de cadena 1 que comença en posició posicionCad. Es compara fins que una cadena acaba si no s'especifica opcLongitud, o el nombre de caràcters indicat si sí s'especifica. Per defecte diferència majúscules i minúscules, però establint opcBoolDiferencia true no distingirà entre majúscules i minúscules.

$cadena1='dimarts';

$cadena2="Dimarts de fira ';

substr_compare($cadena1, $cadena2, 0, strlen($cadena1), true)

// Retorna 0, són iguals

 

FARCIT DE CADENES AMB STR_PAD

Aquesta funció realitza un farciment de cadenes ampliant la cadena fins a una longitud especificada i omplint amb el caràcter o caràcters especificats fins aquesta longitud. La sintaxi és:

str_pad (string $ cadnea, int $ nuevaLongitud $opcCarRelleno, opcTipoDeRelleno)

On opcCarRelleno és opcional i indica el caràcter o caràcters de farciment que s'empraran. Si no s'especifica, es prendrà l'espai en blanc com a caràcter de farciment.

opcTipoDeRelleno és opcional i indica com s'omplirà fins a aconseguir la nova longitud: per la dreta, per l'esquerra o per ambdós costats. Els valors que pot prendre són: STR_PAD_RIGHT, STR_PAD_LEFT, o STR_PAD_BOTH. Si no s'especifica per defecte s'omplirà utilitzant STR_PAD_RIGHT (per la dreta).

Escriu aquest codi i comprova els resultats:

<? Php

$cadena = 'aprendreaprogramar.com';

echo '<p>' str_pad($cadena, 28, '*') '</p>' ..;

.. Echo '<p>' str_pad($cadena, 48, '! Cool') '</ p>';

echo '<p>' str_pad($cadena, 2, 'a') '</p>' ..;

echo '<p>' str_pad($cadena, 28, '*', STR_PAD_RIGHT) '</p>' ..;

echo '<p>' str_pad($cadena, 29, '@', STR_PAD_BOTH) '</p>' ..;

  ?>

El resultat esperat és:

aprendreaprogramar.com ******

aprendreaprogramar.comcool! cool! cool! cool! cool! c

aprendreaprogramar.com

aprendreaprogramar.com ******

@ Aprendreaprogramar.com

Fixa't que en aquest cas la longitud de la cadena és de 22 caràcters. Si li posem que la nova longitud és 29 i que ompli a banda i banda comença col·locant un caràcter a dreta i un altre a esquerra, però després de col·locar 6 només li queda 1 per col·locar i aquest caràcter queda a dreta.

Existeixen més funcions per a cadenes en PHP però els programadors no les solen conèixer totes, ja que algunes són per a tasques molt específiques. Si en algun moment necessites realitzar tasques molt específiques amb cadenes en PHP pots conèixer totes les funcions existents acudint a la documentació oficial de PHP sobre funcions de cadenes, disponible a  http://php.net/manual/es/ref.strings.php   

 

EXERCICI

Crear arxius php que executin la tasca indicada:

a) Donades les cadenes "aprendre" i "aprèn", mostrar per pantalla la cadena farcida amb * a dreta i esquerra en un nombre d'asteriscos que serà sempre 5 a cada costat encara que es canviïn les cadenes.

b) Donades les cadenes "aprendre" i "aprèn", mostrar per pantalla si els seus tres primers caràcters són iguals o no usant una funció de comparació de subcadenes.

c) Donada la cadena "Aprendre a proGraMar.cOm" transformar la cadena a minúscules i omplir-la a dreta i esquerra amb una longitud de asteriscs igual a la meitat de la seva longitud si és parell o igual a la meitat de (la seva longitud més 1) si és imparell. Mostrar per pantalla la cadena en minúscules i amb el farciment indicat.