Functia prezentata in aceasta pagina poate fi utilizata in PHP pentru impartirea /separarea unui sir alfanumeric (un sir cu mai multe sub-siruri de forma: "Nume Numar", separate printr-un anumit caracter).
Aceasta functie separa "Nume" de "Numar", si le adauga separat in doua array-uri, in ordinea lor din sir.
- Vedeti exemplele si comentariile din cod.
Codul functiei
/*
primeste 3 argumente:
- $str = sirul alfanumeric,
- $dlm1 = caracterul ce separa Nume de Numar
- $dlm2 = caracterul ce separa perechile de sub-siruri: "Nume Numar"
Un sir in felul acesta:
"Nume[$dlm1]Numar[$dlm2]Nume[$dlm1]Numar"
- caracterele de separare ($dlm1, si $dlm2) pot fi orice caracter, de exemplu: spatiu, liniuta, punct, virgula, etc.
returneaza un array bidimensional, cu Nume si Numar din $str separate in doua array-uri, in ordinea lor din sir
*/
function splitNumeNumar($str, $dlm1, $dlm2) {
// Curs PHP-MySQL: https://marplo.net/php-mysql/
// array cu caractere ce trebuie escapate (cu '\') in RegExp
$chrs = array('.','(',')','[',']','<','>','?',"'",'^','*','-','+','\\','/');
if(in_array($dlm1, $chrs)) $dlm1 = '\\'.$dlm1;
if(in_array($dlm2, $chrs)) $dlm2 = '\\'.$dlm2;
// obtine un array cu perechile 'Nume-Numar' din $str
if(preg_match_all('/([a-z \._\-'. $dlm1 . $dlm2. ']+[0-9]+)/i', $str, $mt)) {
$re = array(); // variabila pt datele care vor fi returnate
$nrmt = count($mt[0]); // Numar de sub-siruri
// parcurge sub-sirurile gasite
for($i=0; $i<$nrmt; $i++) {
// separa Nume de Numar, le adauga in array-ul $re
if(preg_match('/([a-z \._\-'. $dlm1. ']+)([0-9]+)/i', $mt[0][$i], $mt2)) {
$re['Nume'][$i] = trim($mt2[1], ' '. $dlm1);
$re['num'][$i] = $mt2[2];
}
}
return $re;
}
else return false;
}
- Exemplu:
<?php
// AICI adauga functia splitNumeNumar()
// sir cu Nume si Numar separate prin punct '.', perechile de sub-siruri separate prin virgula ','
$str1 = 'Curs PHP-MySQL.2013, CoursesWeb.net.2011, MarPlo.net.2009';
$split_str1 = splitNumeNumar($str1, '.', ',');
// text cu Nume si Numar separate prin punct spatiu, perechile de sub-siruri separate prin virgula ','
$str2 = 'Code Snippets 12, Cod PHP 2011, MarPlo.net Cursuri 2009';
$split_str2 = splitNumeNumar($str2, ' ', ',');
// sir cu Nume si Numar si perechile de sub-siruri separate prin spatiu
$str3 = 'Tutoriale PHP-MySQL 23 Lectii Ajax 9 Web Development 2013';
$split_str3 = splitNumeNumar($str3, ' ', ',');
// test
echo "<pre>// De la \$str1 \n";
var_export($split_str1);
echo "\n// De la \$str2 \n";
var_export($split_str2);
echo "\n// De la \$str3 \n";
var_export($split_str3);
echo '</pre>';
Rezultat:
// De la $str1
array (
'Nume' => array (
0 => 'Curs PHP-MySQL',
1 => 'CoursesWeb.net',
2 => 'MarPlo.net',
),
'num' => array (
0 => '2013',
1 => '2011',
2 => '2009',
)
)
// De la $str2
array (
'Nume' => array (
0 => 'Code Snippets',
1 => 'Cod PHP',
2 => 'MarPlo.net Cursuri',
),
'num' => array (
0 => '12',
1 => '2011',
2 => '2009',
)
)
// De la $str3
array (
'Nume' => array (
0 => 'Tutoriale PHP-MySQL',
1 => 'Lectii Ajax',
2 => 'Web Development',
),
'num' => array (
0 => '23',
1 => '9',
2 => '2013',
)
)