Forse con un esempio riesco a spiegarmi meglio perche il quesito l' ho postato dopo una notte di disperazione alla ricerca di una soluzione e devo avere fatto un po di confusione.
Dunque: sto facendo il parsing di un file html racchiuso in una pagina web che chiamero' per semplicita http://www.pagina.com dove sono racchiusi i seguenti tag
HTML:
<!= altro html vario =>
<li class="track" data-ec-name="1 - valore inutile - a" data-ec-creative="altri dati>contenuto</li>
<!= altro html vario =>
<li class="track" data-ec-name="2 - valore inutile - b" data-ec-creative="altri dati>contenuto</li>
<!= altro html vario =>
<li class="track" data-ec-name="3 - valore inutile - a" data-ec-creative="altri dati">contenuto</li>
<!= altro html vario =>
quindi tramite una classe DOM (simple_html_dom.php) ho proceduto come segue per estrarre i valori del tag 'data-ec-name' :
PHP:
//includo la classe
require 'simple_html_dom.php';
// carico pagina html
$html = file_get_html('http://www.pagina.com');
// Cerco tag che mi interessa attraverso il valore dell'attributo 'class' (purtroppo sembra che la classe DOM non consideri 'data-ec-name' un attributo quindi diventa un po cervellotica a questo punto)
$codes = $html->find('li[class=track]');
//ottengo array dei risultati
foreach($codes as $code) {
//listo array
for($i = 0; $i < count($code); $i++) {
//purtroppo la classe DOM che uso non riconosce 'data-ec-name='
//quindi cerco la porzione di stringa che mi interessa in questo modo
$pos1 = strpos($code, 'data-ec-name=');
$pos2 = strpos($code, ' data-ec-creative=');
$code_str = substr($code,$pos1,$pos2-$pos1);
//rimuovo le porzioni di stringa che non mi servono
$code_find = array('data-ec-name=', '"', ' - valore inutile - ');
$code_replace = array('', '', '-');
//ottengo la stringa finale
$code_string_final = str_replace($code_find, $code_replace, $code_str);
//creo la lista dei valori
list ($code, $title) = explode("-", $code_string_final);
//stampo risultato
echo $code .'-'. $title . '<br>';
}
}
questo e' il risultato:
1-a
2-b
3-a
come faccio ad eliminare la riga dove 'a' si ripete????[/PHP]
<?php
//includo la classe
require 'simple_html_dom.php';
// carico pagina html
$html = file_get_html('example.html');
// Cerco tag che mi interessa attraverso il valore dell'attributo 'class' (purtroppo sembra che la classe DOM non consideri 'data-ec-name' un attributo quindi diventa un po cervellotica a questo punto)
$codes = $html->find('li[class=track]');
// VETTORE VALORI UNICI
$unique = array();
//ottengo array dei risultati
foreach($codes as $code) {
//listo array
for($i = 0; $i < count($code); $i++) {
//purtroppo la classe DOM che uso non riconosce 'data-ec-name='
//quindi cerco la porzione di stringa che mi interessa in questo modo
$pos1 = strpos($code, 'data-ec-name=');
$pos2 = strpos($code, ' data-ec-creative=');
$code_str = substr($code,$pos1,$pos2-$pos1);
//rimuovo le porzioni di stringa che non mi servono
$code_find = array('data-ec-name=', '"', ' - valore inutile - ');
$code_replace = array('', '', '-');
//ottengo la stringa finale
$code_string_final = str_replace($code_find, $code_replace, $code_str);
//creo la lista dei valori
list ($code, $title) = explode("-", $code_string_final);
//stampo risultato
if (!in_array($title, $unique)) { // se il valore non esiste nell'array
echo $code .'-'. $title . '<br>'; // lo stampo
array_push($unique, $title); // lo aggiungo nell'array
// non verra più stampato
}
}
}
?>
<?php
//includo la classe
require 'simple_html_dom.php';
// carico pagina html
$html = file_get_html('example.html');
// Cerco tag che mi interessa attraverso il valore dell'attributo 'class' (purtroppo sembra che la classe DOM non consideri 'data-ec-name' un attributo quindi diventa un po cervellotica a questo punto)
$codes = $html->find('li[class=track]');
// VETTORE VALORI UNICI
$unique = array();
//ottengo array dei risultati
foreach($codes as $code) {
//listo array
for($i = 0; $i < count($code); $i++) {
//purtroppo la classe DOM che uso non riconosce 'data-ec-name='
//quindi cerco la porzione di stringa che mi interessa in questo modo
$pos1 = strpos($code, 'data-ec-name=');
$pos2 = strpos($code, ' data-ec-creative=');
$code_str = substr($code,$pos1,$pos2-$pos1);
//rimuovo le porzioni di stringa che non mi servono
$code_find = array('data-ec-name=', '"', ' - valore inutile - ');
$code_replace = array('', '', '-');
//ottengo la stringa finale
$code_string_final = str_replace($code_find, $code_replace, $code_str);
//creo la lista dei valori
list ($code, $title) = explode("-", $code_string_final);
//stampo risultato
if (!in_array($title, $unique)) { // se il valore non esiste nell'array
echo $code .'-'. $title . '<br>'; // lo stampo
array_push($unique, $title); // lo aggiungo nell'array
// non verra più stampato
}
}
}
?>
ciao
da quanto ho capito l'array che devi trattare e $title, giusto?
fai un esempio concreto di come e fatto l'array, metti subito dopo la sua creazione
PHP:
var_dump($title);
e posta il risultato
vedendo concretamente quale è la struttura forse si riesce meglio a capire cosa fare
sembra funzionare in alcune parti ma non in altre.
possiblita' di conflitti di script ?
comunque grazie tantissimo
fosse per me sarei ancora in alto mare
Sto facendo il parsing di una pagina beatport per ottenere link e titoli delle traccie da inserire in un player visto che mi stanno facendo aspettare da un mese la key per accedere alle loro API
se lo fai girare vedrai che i titoli delle track vengono ripetuti nonostante il tuo ottimo suggerimento.
ma la cosa che mi lascia veramente perplesso e' che se lo stesso script lo fai girare per questa pagina https://www.beatport.com/artist/perceptors/352712/tracks
allora le traccie non si ripetono!
non so se ridere o piangere
P.s.:
non l'ho scritto perche' presumo tu sappia dove trovare il file della classe dom che sto utilizzando
@Borgo, il suo codice funziona bene, deve solo gestire il titolo nell'array "$unique" anziché il codice,
vedi mio post
(ovviamente se corrisponde al risultato atteso)