Node list PHP: if (strpos(...)

AnoniMouse

Active Member
Registered
Full Member
Salut! Lucrez la un script si m-am lovit de o problema. Nu stiu cum sa numar cate link-uri exista, care contin acelasi cuvant.

$list --- il iau cu xpath (sunt link-urile dintr-un site.)

Cod:
for ($i = 0; $i < $list->length; $i++) {
     $urlanunturi=$list->item($i)->value;

    if (strpos($urlanunturi, 'anunt-1') !== false) {
echo "Sunt [B]X [/B]url-uri care contin "anunt-1" in link";

///make magic

}

    if (strpos($urlanunturi, 'anunt-2') !== false) {
echo "Sunt [B]X [/B]url-uri care contin "anunt-2" in link";

///make magic
}

si tot asa... Nu stiu cum sa numar cate link-uri din $list contine "anunt-N".

Stie cineva?
Multumesc!
 
?
PHP:
$anunt = [];
for ($i = 0; $i < $list->length; $i++) {
$urlanunturi=$list->item($i)->value;
if(preg_match('/anunt-([0-9]+)/',$urlanunturi,$numar)) {
if(!array_key_exists($numar[1],$anunt)) {
$anunt[$numar[1]] = 0;
}
$anunt[$numar[1]]++;
}
}
foreach($anunt as $index=>$count) {
echo 'Sunt [B]'.$count.' [/B]url-uri care contin "anunt-'.$index.'" in link'; 
}
 
?
PHP:
$anunt = [];
for ($i = 0; $i < $list->length; $i++) {
$urlanunturi=$list->item($i)->value;
if(preg_match('/anunt-([0-9]+)/',$urlanunturi,$numar)) {
if(!array_key_exists($numar[1],$anunt)) {
$anunt[$numar[1]] = 0;
}
$anunt[$numar[1]]++;
}
}
foreach($anunt as $index=>$count) {
echo 'Sunt [B]'.$count.' [/B]url-uri care contin "anunt-'.$index.'" in link';
}
Multumesc frumos. Merge Foarte bine!
 
PHP:
$list = "
https://domain.tld/anunt-1/
https://domain.tld2/anunt-1/
https://domain.tld3/anunt-1/
https://domain.tld4/anunt-6/
https://domain.tld5/anunt-1/
https://domain.tld6/anunt-3/
https://domain.tld7/anunt-1/
https://domain.tld8/anunt-1/
https://domain.tld9/anunt-2/
https://domain.tld10/anunt-1/";

preg_match_all('/(.*?)anunt-1(.*?)/', $list, $output);
echo count($output[1]);
 
PHP:
$list = "
https://domain.tld/anunt-1/
https://domain.tld2/anunt-1/
https://domain.tld3/anunt-1/
https://domain.tld4/anunt-6/
https://domain.tld5/anunt-1/
https://domain.tld6/anunt-3/
https://domain.tld7/anunt-1/
https://domain.tld8/anunt-1/
https://domain.tld9/anunt-2/
https://domain.tld10/anunt-1/";

preg_match_all('/(.*?)anunt-1(.*?)/', $list, $output);
echo count($output[1]);
omul a cerut cu totul altceva. numerele in cazul lui sunt necunoscute. ce ai dat tu acolo numara toate rezultatele ce contin 'anunt-1', insemnand ca va lua in calcul orice incepe cu anunt-1, cum ar fi si anunt-11, anunt-12, etc. chiar daca ar fi un exemplu basic, e un exemplu gresit.
 
?
PHP:
$anunt = [];
for ($i = 0; $i < $list->length; $i++) {
$urlanunturi=$list->item($i)->value;
if(preg_match('/anunt-([0-9]+)/',$urlanunturi,$numar)) {
if(!array_key_exists($numar[1],$anunt)) {
$anunt[$numar[1]] = 0;
}
$anunt[$numar[1]]++;
}
}
foreach($anunt as $index=>$count) {
echo 'Sunt [B]'.$count.' [/B]url-uri care contin "anunt-'.$index.'" in link';
}
Ai putea sa mai adaugi ceva?
Sa-mi spuna intr-un array ($urlanunturi_specific), care sunt url-urile care au anunt-([0-9]+ ?
Exemplu:
$urlanunturi = contine toate url-urile;
$urlanunturi_specific = contine numai url-uri cu anunt-1 (sau anunt-2, etc);

PHP:
foreach($anunt as $index=>$count) {

echo 'Sunt ['.$count.']url-uri care contin "anunt-'.$index.'" in link';

    $urlanunturi_specific = .....

//// daca am aflat care sunt url... sa fac eu ce vreau cu ele dupa.

///// for ($ar = 0; $ar < $urlanunturi_specific->length; $ar++) {

}
}
 
Ai putea sa mai adaugi ceva?
Sa-mi spuna intr-un array ($urlanunturi_specific), care sunt url-urile care au anunt-([0-9]+ ?
Exemplu:
$urlanunturi = contine toate url-urile;
$urlanunturi_specific = contine numai url-uri cu anunt-1 (sau anunt-2, etc);

PHP:
foreach($anunt as $index=>$count) {

echo 'Sunt ['.$count.']url-uri care contin "anunt-'.$index.'" in link';

    $urlanunturi_specific = .....

//// daca am aflat care sunt url... sa fac eu ce vreau cu ele dupa.

///// for ($ar = 0; $ar < $urlanunturi_specific->length; $ar++) {

}
}
?


update cod principal.

PHP:
$anunt = [];
for ($i = 0; $i < $list->length; $i++) {
$urlanunturi=$list->item($i)->value;
if(preg_match('/anunt-([0-9]+)/',$urlanunturi,$numar)) {
$anunt[$numar[1]][] = $urlanunturi;
}
}
foreach($anunt as $index=>$url) {
echo "\n".'Sunt [B]'.count($url).' [/B]url-uri care contin "anunt-'.$index.'" in link'."\n";
echo "\n".'Continut: '."\n\n";
foreach($url as $urlanunturi_specific) {
echo $urlanunturi_specific."\n";
}
}


1614858997552.png
 
?


update cod principal.

PHP:
$anunt = [];
for ($i = 0; $i < $list->length; $i++) {
$urlanunturi=$list->item($i)->value;
if(preg_match('/anunt-([0-9]+)/',$urlanunturi,$numar)) {
$anunt[$numar[1]][] = $urlanunturi;
}
}
foreach($anunt as $index=>$url) {
echo "\n".'Sunt [B]'.count($url).' [/B]url-uri care contin "anunt-'.$index.'" in link'."\n";
echo "\n".'Continut: '."\n\n";
foreach($url as $urlanunturi_specific) {
echo $urlanunturi_specific."\n";
}
}


Multumesc Mult!
 
Inca o mica intrebare.

Cum extrag din DomNodeList doar link-urile unice? (le sterge pe cele duplicat)

Cod:
$linkanunt = $xpath->query('//*[@id="acasa"]/div/a/@href');

foreach ($linkanunt as $linkanunt) {
    echo $linkanunt->nodeValue . "\n";
}

Afiseaza:

Cod:
domeniu.com/anunt-1
domeniu.com/anunt-1
domeniu.com/anunt-1
domeniu.com/anunt-2
domeniu.com/anunt-3
domeniu.com/anunt-4
domeniu.com/anunt-5
domeniu.com/anunt-5
domeniu.com/anunt-5

As vrea sa afiseze doar 1 data.

Cod:
domeniu.com/anunt-1
domeniu.com/anunt-2
domeniu.com/anunt-3
domeniu.com/anunt-4
domeniu.com/anunt-5
 
Inca o mica intrebare.

Cum extrag din DomNodeList doar link-urile unice? (le sterge pe cele duplicat)

Cod:
$linkanunt = $xpath->query('//*[@id="acasa"]/div/a/@href');

foreach ($linkanunt as $linkanunt) {
    echo $linkanunt->nodeValue . "\n";
}

Afiseaza:

Cod:
domeniu.com/anunt-1
domeniu.com/anunt-1
domeniu.com/anunt-1
domeniu.com/anunt-2
domeniu.com/anunt-3
domeniu.com/anunt-4
domeniu.com/anunt-5
domeniu.com/anunt-5
domeniu.com/anunt-5

As vrea sa afiseze doar 1 data.

Cod:
domeniu.com/anunt-1
domeniu.com/anunt-2
domeniu.com/anunt-3
domeniu.com/anunt-4
domeniu.com/anunt-5

Il aplici pe array.
 
foreach ($linkanunt as $linkanunt) {
probabil e doar un exemplu, dar daca chiar asa ai codul, nu folosi acelasi nume la ambele variabile



L-am facut array dupa am aplicat array_unique, dar imi afiseaza aceleasi valori.
e cam imposibil sa nu mearga cu array_unique daca le-ai facut array cum trebuie, ai putea incerca cu in_array sau array_search. toate 3 functioneaza cu values. si ar avea acelasi rezultat.

~

daca chiar nu iti merge nicicum cu arrays, atunci cautam alte solutii
 
probabil e doar un exemplu, dar daca chiar asa ai codul, nu folosi acelasi nume la ambele variabile




e cam imposibil sa nu mearga cu array_unique daca le-ai facut array cum trebuie, ai putea incerca cu in_array sau array_search. toate 3 functioneaza cu values. si ar avea acelasi rezultat.

~

daca chiar nu iti merge nicicum cu arrays, atunci cautam alte solutii
Am transformat DomNodeList in Array.

Cod:
$linkanunt = $xpath->query('//*[@id="acasa"]/div/a/@href');

$array = array();
foreach ($linkanunt as $linkanunt2) {
   $array[] = $linkanunt2;
}

$nodearray = array_unique($array);

print_r($nodearray);

array_unique nu merge!
 
Am transformat DomNodeList in Array.

Cod:
$linkanunt = $xpath->query('//*[@id="acasa"]/div/a/@href');

$array = array();
foreach ($linkanunt as $linkanunt2) {
   $array[] = $linkanunt2;
}

$nodearray = array_unique($array);

print_r($nodearray);

array_unique nu merge!

incearca si vezi care iti merge.


PHP:
$linkanunt = $xpath->query('//*[@id="acasa"]/div/a/@href');

$array = array();
foreach ($linkanunt as $linkanunt2) {
if(!in_array($linkanunt2, $array)) {
   $array[] = $linkanunt2;
}
}

$nodearray = $array;

print_r($nodearray);


PHP:
$linkanunt = $xpath->query('//*[@id="acasa"]/div/a/@href');

$array = array();
foreach ($linkanunt as $linkanunt2) {
if(array_search($linkanunt2, $array) == false) {
   $array[] = $linkanunt2;
}
}

$nodearray = $array;

print_r($nodearray);
 
Loading...
Back
Sus