[PHP]RISOLTO: eliminazione riga con singolo valore duplicato in array

fabryx

Nuovo Utente
9 Ott 2016
38
2
8
1-a
2-b
3-a

come faccio ad eliminare la riga dove 'a' si ripete????
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
scusa una cosa: sono tre arrya? es
PHP:
$uno=array(0 => 1, 1 => 'a');
$due=array(0 => 2, 1 => 'b');
$tre=array(0 => 3, 1 => 'a');
oppure uno solo
PHP:
$uno=array(0 => 1, 1 => 'a');
$uno=array(0 => 2, 1 => 'b');
$uno=array(0 => 3, 1 => 'a');
nel secondo caso gli unci valori che ti ritrovi sono 0 => 3, 1 => 'a'
 

fabryx

Nuovo Utente
9 Ott 2016
38
2
8
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]
 
Ultima modifica:

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Ciao. prova così.
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

    }
    }
}
?>
 

fabryx

Nuovo Utente
9 Ott 2016
38
2
8
Ciao. prova così.
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

    }
    }
}
?>

Errore:
in_array() expects parameter 2 to be array, null given in
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Hai citato il mio messaggio perché hai copiato, incollato ed eseguito il mio codice? Sicuro di aver creato il seguente vettore?
PHP:
// VETTORE VALORI UNICI
$unique = array();
 

fabryx

Nuovo Utente
9 Ott 2016
38
2
8
Hai citato il mio messaggio perché hai copiato, incollato ed eseguito il mio codice? Sicuro di aver creato il seguente vettore?
PHP:
// VETTORE VALORI UNICI
$unique = array();

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 :confused:
 

AdeKnite

Utente Attivo
3 Ago 2016
161
35
28
30
Se specifichi bene cosa non funziona (il codice che esegui e l'output ricevuto) magari possiamo darci un'occhiata.
 

fabryx

Nuovo Utente
9 Ott 2016
38
2
8
Se specifichi bene cosa non funziona (il codice che esegui e l'output ricevuto) magari possiamo darci un'occhiata.

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

PHP:
<?
//Class include
require 'simple_html_dom.php';

$unique = array();
$uri = 'https://www.beatport.com/artist/avengers/203716/tracks';
    $bp_html = file_get_html($uri);
// Find track code and track title
        $bp_tracks_codes = $bp_html->find('li[class=track]');
        foreach ($bp_tracks_codes as $bp_track_code){
            $bp_t_code_pos1 = strpos($bp_track_code, 'data-ec-name="');
            $bp_t_code_pos2 = strpos($bp_track_code, '" data-ec-creative=');
            $bp_t_code_str = substr($bp_track_code,$bp_t_code_pos1,$bp_t_code_pos2-$bp_t_code_pos1);
            $bp_t_code_find = array('data-ec-name=', '"', ' - track - ');
            $bp_t_code_replace = array('', '', '-');
            $bp_track_code = str_replace($bp_t_code_find, $bp_t_code_replace, $bp_t_code_str);
            list ($track_code, $track_title) = explode("-", $bp_track_code);
//Removing duplicate entry
            if (!in_array($track_code, $unique)) {
                $audio_link = str_replace(' ', '', 'http://geo-samples.beatport.com/lofi/' . $track_code . '.LOFI.mp3');
                echo '<b>' .$track_title . '</b><br><audio preload="auto" src="' .$audio_link. '" controls="controls"></audio><hr>';
                array_push($unique, $track_code);
               
            }
        }
?>

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 :(:confused:

P.s.:
non l'ho scritto perche' presumo tu sappia dove trovare il file della classe dom che sto utilizzando :)
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
ho stampato i track codes commentando tutto l'if
PHP:
    echo $track_code."<br />";

//    if (!in_array($track_code, $unique)) {
sono univoci !
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
PHP:
    echo $track_code." - ".$track_title."<br />";

//    if (!in_array($track_code, $unique))
//    {
//        $audio_link = str_replace(' ', '', 'http://geo-samples.beatport.com/lofi/' . $track_code . '.LOFI.mp3');
//        echo '<b>' .$track_title . '</b><br><audio preload="auto" src="' .$audio_link. '" controls="controls"></audio><hr>';
//        array_push($unique, $track_code);
//    }

elenco
Codice:
track    track
code    title
7591546    Beautiful Destination
8300233    Beautiful Destination
6340324    City Lights
6839203    City Lights
6633990    Connection To Space
3095788    Fuckin' Commercial Music
3095789    Fuckin' Commercial Music
3095790    Fuckin' Commercial Music
3095604    Horny Level
7726425    Intoxicated
3115838    Kdabra
7318555    Kick in Ass
2027478    Life's A Bitch
6340329    Liquid
7726424    Lost World
6633991    Nasty
3358948    Powermesh
6340328    Prog'n Roll
7008387    Prog'n Roll
6504357    Randomise
7591545    Rastafari
2027477    Revenge
2712509    Revenge
3880685    Talking
3880686    Talking
3880687    Talking
4204306    Talking
3095791    This Is Trash
3095792    This Is Trash
7726426    Tomorrow People
6504358    Trinity
7558852    Trinity
7318556    True Killer
7701586    True Killer
3095793    Warfare

come vedi i track code sono tutti differenti anche a parità di titolo
forse anziché rendere univoco il track code ti conviene agire sul titolo
ciao
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
PHP:
    if (!in_array($track_title, $unique))
    {
        $audio_link = str_replace(' ', '', 'http://geo-samples.beatport.com/lofi/' . $track_code . '.LOFI.mp3');
        echo '<b>' .$track_title . '</b><br><audio preload="auto" src="' .$audio_link. '" controls="controls"></audio><hr>';
        array_push($unique, $track_title);
    }
così ottengo titoli non duplicati
vedi se ti va bene
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
se vuoi eliminare i titolo duplicati dai un occhio
PHP:
<?php
function elimina_duplicati($a){
    for($k=0;$k<(count($a)-1);$k++){
        for($j=($k+1); $j<count($a);$j++){
            if($a[$k][1]==$a[$j][1]){
                $da_elim[$j]=$j;
            }
        }
    }
    foreach($da_elim as $chiave){
        unset($a[$chiave]);
    }
    return $a;
}
/*---test-----*/
$title[]=array(0=>'1', 1=>'a');
$title[]=array(0=>'2', 1=>'a');//uguale a 1
$title[]=array(0=>'3', 1=>'b');
$title[]=array(0=>'4', 1=>'c');
$title[]=array(0=>'5', 1=>'d');
$title[]=array(0=>'6', 1=>'e');
$title[]=array(0=>'7', 1=>'c');//uguale a 4

echo "<pre>";
var_dump(elimina_duplicati($title));
echo "<pre>";
?>
ho scritto i procedurale perche non amo la prog a oggetti comunque se ti serve la trasformi
 

marino51

Utente Attivo
28 Feb 2013
3.203
207
63
Lombardia
@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)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
ciao
si,
non so cosa ne farà dell'array, ma il suo codice non stampa il duplicato il mio elimina fisicamente

dimenticavo:
il mio opera sul titolo [1], se volesse oprerare sul codice [0]
 
Discussioni simili
Autore Titolo Forum Risposte Data
C [RISOLTO]Inserimento variabile php in input html PHP 20
moustache [RISOLTO] SQL PHP IIS PHP 8
L update tabelle in php mysql [risolto] PHP 6
A [PHP] Problema query insert [RISOLTO] PHP 14
B [PHP] recuperare IP dei server in load balancing [RISOLTO] PHP 3
K [RISOLTO] Problema Griglia Php+Mysql PHP 13
C [RISOLTO][PHP] Errore di sintassi PHP 8
Kolop [RISOLTO][PHP] Problema Pagination PHP 2
C [RISOLTO][PHP] Funzione ONclick PHP 14
C [RISOLTO][PHP] Conteggio righe di una tabella PHP 4
N [PHP] Utilizzo variabili di sessione [Risolto] PHP 13
Tommy03 [RISOLTO][PHP] Webserver o devserver? PHP 2
spider81man [PHP] Problemi cancellazione dato su DB [RISOLTO] PHP 1
A [PHP] RISOLTO Invio Mail con Tabella PHP 2
elpirata [PHP][RISOLTO] Sommare gli importi estratti da un ciclo while PHP 3
elpirata [PHP][RISOLTO] Effettuare la somma dei tempi di lavorazione PHP 3
elpirata [PHP] [RISOLTO]Sovrascrivere testo in una tabella PHP 2
A [RISOLTO]Recuperare dati inviati con json tramite php PHP 4
C [RISOLTO][PHP] Passaggio variabili senza refresh di pagina PHP 7
elpirata [PHP][RISOLTO] Errore di tipo Notice: Undefined index - Come risolvere quando si hanno tante var PHP 10
S Problema in PHP per invio file XML - RISOLTO- PHP 8
A [RISOLTO] HighChart e PHP PHP 4
A [RISOLTO] PHP Selezionare tutti i file con stessa estensione PHP 2
A [RISOLTO] Table elaborata da codice PHP con dati da DB non visualizzata in IFRAME PHP 15
Zea [PHP] RISOLTO - creare link con il risultato dell'interrogazione db PHP 1
A [PHP] [RISOLTO]Compilazione campi form da record db PHP 3
A [PHP] [RISOLTO] Modifica record db da form PHP 11
G [PHP][RISOLTO] Include/Require non funzionante PHP 9
C [PHP] RISOLTO - Eliminare elementi duplicati da array multidimensionale PHP 1
G [RISOLTO][PHP] Call to a member function num_rows() on a non-object PHP 9
U [PHP - RISOLTO] Tabella dinamica: colonne selezionate da checkbox PHP 40
CristianB72 [RISOLTO] [PHP] Istruzione "if" non funziona PHP 6
fabryx [PHP] RISOLTO: Download file da web e trasferimento su server PHP 2
fabryx [PHP]RISOLTO: Parsing xml nodi con caratteri speciali PHP 1
CristianB72 [RISOLTO][PHP] preg_match di un array PHP 7
G [RISOLTO][PHP] Estrapolare dati da Tabella PHP 11
A [RISOLTO]Errore caricamento file php PHP 21
coccobil [PHP] RISOLTO -Recupare valore data che soddisfa certi requisiti da array PHP 3
fabryx [PHP]RISOLTO: Trasformare righe in colonne assegnando singole variabili PHP 10
elpirata [RISOLTO]Stampare giorno della settimana in tabella php PHP 6
elpirata [PHP] [RISOLTO] Stampare classe css in base al risultato della query PHP 6
elpirata [Risolto] Gestione Prenotazioni script php PHP 25
K [risolto] passaggio variabile a pagina php con ajax Ajax 6
J [risolto] Trasformare la seguente classe PHP PHP 2
E [risolto] win 8.1 + IE11 le sessioni PHP non fuonzionano correttamente PHP 7
N [RISOLTO] Mostrare a video le checkbox selezionate con PHP e MySQL PHP 4
otto9due [risolto] Problema sessioni php e login PHP 5
G [risolto] Creazione file excel con PHP PHP 3
S [risolto] Aiuto: ciclo php ( for / while). popolare select dinamicamente da array id. PHP 9
Alessandro Le Mura [risolto] PHP problema memorizzazione array PHP 4

Discussioni simili