Individuare parte di un elemento in un array e ottenere la chiave

giuseppeI

Utente Attivo
25 Giu 2012
41
0
0
Salve a tutti,
la funzione "array_search" individua un elemento all'interno di un array e ne restituisce l'indice ovvero la posizione all'interno dell'array stesso. Questo funziona se l'elemento stesso è costituito da un unico termine. Esiste una funzione o un modo per individuare l'elemento anche quando è formato da più termini e se ne indica soltanto uno?
Cerco di essere più chiaro, mettiamo di avere il seguente array:
PHP:
$nome[0]="caterina longo";
$nome[1]="silvia la bella";
$nome[2]="nunzio de angelis";
$nome[3]="girolamo savonarola";
$nome.....

e come elemento di ricerca si indica soltanto, per esempio, bella, si può risalire al suo indice ovvero ad "1" ed in più generale a tutti gli elementi che contengo lo stesso termine, ovvero in questo caso bella?
Grazie
Giuseppe
 
Ciao, ti mostro un esempio di come farei

PHP:
$nome[0]="caterina longo"; 
$nome[1]="silvia la bella"; 
$nome[2]="nunzio de angelis"; 
$nome[3]="girolamo savonarola"; 
$nome[4]="prova bella test";


$bella = prendiChiaveParola('bella',$nome);

var_dump($bella);

function prendiChiaveParola($st,$array){
    $return = array();
    foreach((array)$array as $key => $value) if(strstr($value,$st)) array_push($return,$key);
    return $return;
}
 
Intanto ti ringrazio.
però nella mia umiltà ti dico che non ho capito molto bene come funziona la funzione "prendiChiaveParola".
Penso che "var_dump" metta a video le varie chiavi dell'elemento. A me servirebbe però un array (non a video) con i soli indici da poter utilizzare in seguito.
Grazie ancora.
Giuseppe
 
Intanto ti ringrazio.
però nella mia umiltà ti dico che non ho capito molto bene come funziona la funzione "prendiChiaveParola".
Penso che "var_dump" metta a video le varie chiavi dell'elemento. A me servirebbe però un array (non a video) con i soli indici da poter utilizzare in seguito.
Grazie ancora.
Giuseppe
$bella diventa un array con gli indici di dove trova quella parola nel testo, infatti come vedi nel var_dump risulta 1 e 4 come valori
 
Giusto, avevo trattato $bella come una stringa e non avevo messo l'indice.
Tuttavia i problemi sono stati risolti in parte, perché "$bella" indicizza tutti gli elementi che contengono "bella".
Mettiamo che io voglia selezionare tutti gli elementi di un array che contengano "vino" ed abbia il seguente elenco
- vino bianco
---
---
vino rosso
vino rosato
---
---
- escremento bovino
ecc...
"&bella" mi indicizzerà anche "escremento bovino" in quanto vino è contenuto in bovino.
Come si potrebbe fare?
Grazie ancora
 
Cosi dovrebbe andarti bene

PHP:
$nome[0]="caterina longo";  
$nome[1]="silvia la bella";  
$nome[2]="nunzio de angelis";  
$nome[3]="girolamo savonarola";  
$nome[4]="prova bella test"; 
$nome[5]="bellala boh";
$nome[6]=" ciao altra prova randombellala lol";
$nome[7]="bella";
$nome[8]="ciao aloha bellax";


$bella = prendiChiaveParola('bella',$nome); 

var_dump($bella); 

function prendiChiaveParola($st,$array){
    $return = array(); 
   //puoi farlo anche tramite espressione regolare if(preg_match("/\b$st\b/i",$value))
    foreach((array)$array as $key => $value) if(in_array($st,explode(' ',$value))) array_push($return,$key); 
    return $return; 
}  
//il var_dump dovrebbe contenere 3 chiavi array(3) { [0]=> int(1) [1]=> int(4) [2]=> int(7) }
 

Discussioni simili