[PHP] elenco delle parole presenti in un campo (senza doppioni)

  • Creatore Discussione Creatore Discussione theseo
  • Data di inizio Data di inizio

theseo

Utente Attivo
22 Feb 2017
95
5
8
62
Ciao a tutti, come in oggetto avrei bisogno di uno script che mi stampi a video l'elenco di tutte le parole presenti in un campo del mio DB ovviamente senza scrivere i doppioni, esempio:

ID NOMI
1 pippo topolino paperino
2 pippo paperone minnie
3 topolino
4 paperino minnie
5 pippo paperone

elenco: pippo, topolino, paperone, minnie, paperino

vi chiedo questo aiuto "completo" xchè sono un pò cavernicolo del php e non so proprio che funzione serve... sigh, grazie!
 
ciao
ti schematizzo come potresti fare
PHP:
//... dati connessione e query
//while($riga=mysqli_fetch_assoc($ris)){
    //$elenco[]=$riga['nome'];
//}
//qui simulo quello che ottieni
//dall'esempio che hai fatto
$elenco=array('pippo topolino paperino','pippo paperone minnie','topolino','paperino minnie','pippo paperone');
//presuppongo che i vari nomi siano separati da uno spazio
//ciclo l'arry $elenco e separo i nomi uno per uno
foreach($elenco as $nomi){
    //creo un array con i nomi separati
    $n=explode(" ",$nomi);;
    foreach($n as $nome){
        $nome_un[]=$nome;
    }
}
//elimmo i duplicati
$nome_unico=array_unique($nome_un);
//se serve lo metto in ordine alfabetico
sort($nome_unico);
//riconpongo una stringa unica per poi stamparla
$elenco_nomi=implode(", ",$nome_unico);
echo $elenco_nomi;//output: minnie, paperino, paperone, pippo, topolino

comunque ho un dubbio: forse ti conviene ripensare alla struttura della tabella, considera se non ti converrebbe trasformarla così
ID NOMI
1 pippo
2 topolino
3 paperino
4 pippo
5 paperone
6 minnie
7 topolino
8 paperino
9 minnie
10 pippo
11 paperone
in questo modo ti basterebbe per ottenere una serie unica fare la query così
PHP:
//...
$query="SELECT nomi, FROM tua_tabella ORDER BY nomi GROUP BY nomi";
//...
 
PHP:
<?php
/* DATI DI ACCESSO AL DATABASE */
define("DB_HOST", "INSERISCI_QUI");
define("DB_USER", "INSERISCI_QUI");
define("DB_PSW", "INSERISCI_QUI");
define("DB_NAME", "INSERISCI_QUI");
$nometabella = "INSERISCI_NOME_DELLA_TABELLA";

$db = mysqli_connect(DB_HOST, DB_USER, DB_PSW, DB_NAME);    //Mi connetto al DB

$elenconomi = array();
$query = "SELECT * FROM $nometabella";
$result = $db->query($query);
while ($resultarray = $result->fetch_assoc()) {
    $nomi = explode(" ", $resultarray['nomi']);
    $elenconomi = array_merge($elenconomi, $nomi);
}
$elenconomi = array_unique($elenconomi);
$elenconomi = rtrim(implode(', ', $elenconomi), ', ');
echo "elenco: ".$elenconomi;
?>
 
Grazie Livellacri per la tua risposta, quello che stavo cercando è proprio questo
ho provato il tuo script però mi restituisce un elenco vuoto, l'unica modifica che ho fatto (oltre ovviamente ad avere inserito i dati del db) è questa-->
da così
$query = "SELECT * FROM $nometabella";
a così
$query = "SELECT nomemiocampo FROM $nometabella";
giusto? perchè se no come faceva a sapere a quale campo mi riferisco?
e comunque non mi elenca nulla...
 
Il nome del campo è "nomi", giusto?
Altrimenti devi modificare nella riga 15.

Io ho provato con una tabella così e funziona:
Yvk8oYP.png

p5bEtZ3.png
 
ciao
l'asterisco * nella select indica "leggi tutti i campi", poi nel while leggi il/i campo/i che ti interessano.
verifica l'esatta corrispondenza tra i nomi che hai messo nello script e i nomi che hai nel db, sempre che tu abbia riempito bene la tabella
lo script di livellacri (o il mio) funzionano
 
ahh cacchio hai ragione
avevo messo il nome del campo nel posto sbagliato!! (avevo detto che sono un cavernicolo)
oh va DA DIO!!!!!!!!!!!!!!
grazieeeeeeeeeeeeeeeeeeeeeee
 
  • Like
Reactions: livellacri
ah mentre ci siamo ancora una cosa:
per ordinare questo elenco alfabeticamente devo usare SORT, vero?
ma dove va messo sort....?
 
Va messo prima di impolde.
PHP:
<?php
/* DATI DI ACCESSO AL DATABASE */
define("DB_HOST", "INSERISCI_QUI");
define("DB_USER", "INSERISCI_QUI");
define("DB_PSW", "INSERISCI_QUI");
define("DB_NAME", "INSERISCI_QUI");
$nometabella = "INSERISCI_NOME_DELLA_TABELLA";

$db = mysqli_connect(DB_HOST, DB_USER, DB_PSW, DB_NAME);    //Mi connetto al DB

$elenconomi = array();
$query = "SELECT * FROM $nometabella";
$result = $db->query($query);
while ($resultarray = $result->fetch_assoc()) {
    $nomi = explode(" ", $resultarray['nomi']);
    $elenconomi = array_merge($elenconomi, $nomi);
}
$elenconomi = array_unique($elenconomi);
sort($elenconomi);
$elenconomi = rtrim(implode(', ', $elenconomi), ', ');
echo "elenco: ".$elenconomi;
?>
 
ih fantastico!!
il PHP mi fa proprio godere quando riesce a fare tutte queste cose con una semplicità disarmante
peccato che alla mia età riesco solo ad esserne un cavernicolo...
 
oh dai mentre ci siamo c'è ancora un difettino.... guarda l'elenco-->

acquisto, altezza, capacita, capacita , chilogrammi, chilometri, costo, cubi, debito, decilitro, distributiva, dozzine, equivalenze, euro, euro , frazioni, g, giorni, grammi, guadagno, guadagno , hg, incasso, isoscele, kg, litri, lordo, lunghezza, lunghezza , metri, minuti, netto, ore, percentuale, perdita, perimetro, peso, peso , prezzo, proporzioni, proprietà, quadrati, quantità, quintali, rate, resto, ricavo, rimanenza, risparmio, rivendita, sconto, spesa, tara, tara , triangolo, vendita

vedi che alcune parole le considera doppie xchè prende anche lo spazio o prima o dopo...
anche qui..la funzione è TRIM, vero? ma dove la metto??
 
mi sembra strano... tutti gli spazi dovrebbero essere eliminati da explode.
potresti postare la tabella che ti da quell'elenco?
 
ciao @livellacri
il trim toglie gli spazi in testa e in coda alla stringa quelli in mezzo rimangono come sono
PHP:
$stringa=" uno  due ";//uno spazio prima, due spazi tra le parole, uno spazio dopo
$stringa=trim($stringa);
$esploso=explode(" ",$stringa);
var_dump($esploso);
/* output usando trim
array(3) {
    [0]=> string(3) "uno"
    [1]=> string(0) ""
    [2]=> string(3) "due" }
se invece elimini o commenti il trim
array(5) {
    [0]=> string(0) ""
    [1]=> string(3) "uno"
    [2]=> string(0) ""
    [3]=> string(3) "due"
    [4]=> string(0) "" }
*/
due spazi vicini (o in testa o coda) generano un elemento di array vuoto
 
oh dai mentre ci siamo c'è ancora un difettino.... guarda l'elenco-->

acquisto, altezza, capacita, capacita , chilogrammi, chilometri, costo, cubi, debito, decilitro, distributiva, dozzine, equivalenze, euro, euro , frazioni, g, giorni, grammi, guadagno, guadagno , hg, incasso, isoscele, kg, litri, lordo, lunghezza, lunghezza , metri, minuti, netto, ore, percentuale, perdita, perimetro, peso, peso , prezzo, proporzioni, proprietà, quadrati, quantità, quintali, rate, resto, ricavo, rimanenza, risparmio, rivendita, sconto, spesa, tara, tara , triangolo, vendita

vedi che alcune parole le considera doppie xchè prende anche lo spazio o prima o dopo...
anche qui..la funzione è TRIM, vero? ma dove la metto??
esatto @borgo italia , generano un elemento vuoto, non viene unita alla stringa precedente, come nell'output di theseo.
 
-- phpMyAdmin SQL Dump
-- version 3.4.7.1
-- http://www.phpmyadmin.net
--
-- Host: 62.149.150.140
-- Generato il: Mag 01, 2017 alle 17:02
-- Versione del server: 5.0.92
-- Versione PHP: 5.3.8

SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;


CREATE TABLE IF NOT EXISTS `problemixxx` (
`id` int(6) unsigned NOT NULL auto_increment,
`difficolta2` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=780 ;

INSERT INTO `xxx` (`id`, `difficolta2`) VALUES
(1, 'peso'),
(2, 'spesa ricavo guadagno'),
(3, 'triangolo isoscele perimetro'),
(145, 'chilogrammi'),
(146, 'chilometri lunghezza'),
(147, 'euro'),
(148, 'euro spesa ricavo guadagno'),
(149, 'euro spesa '),
(150, 'euro spesa ricavo guadagno'),
(151, 'euro spesa ricavo guadagno'),
(152, ''),
(153, 'euro spesa ricavo guadagno'),
(154, ''),
(155, 'chilometri lunghezza'),
(156, ''),
(157, 'euro'),
(158, 'euro'),
(159, 'euro spesa ricavo guadagno'),
(160, ''),
(161, 'euro spesa ricavo guadagno'),
(162, 'euro spesa ricavo guadagno'),
(163, ''),
(164, 'euro spesa ricavo guadagno'),
(165, ''),
(166, 'chilometri lunghezza'),
(167, 'euro spesa ricavo guadagno chilogrammi'),
(168, 'euro'),
(169, 'euro metri lunghezza'),
(170, 'euro spesa ricavo guadagno'),
(171, ''),
(172, 'litri minuti capacita'),
(173, 'giorni'),
(174, 'metri lunghezza'),
(175, ''),
(176, 'metri lunghezza'),
(177, 'chilogrammi peso'),
(178, 'euro'),
(179, 'euro spesa ricavo guadagno'),
(180, 'euro spesa ricavo guadagno metri'),
(181, 'euro spesa ricavo guadagno ore'),
(182, 'euro spesa ricavo guadagno chilogrammi'),
(183, 'euro spesa ricavo guadagno costo'),
(184, 'euro spesa ricavo guadagno'),
(185, 'euro spesa ricavo guadagno'),
(186, 'euro spesa ricavo guadagno'),
(187, 'euro spesa ricavo guadagno perdita'),
(193, 'euro spesa ricavo quintali'),
(194, 'euro spesa ricavo risparmio'),
(195, 'euro spesa ricavo'),
(196, 'euro spesa ricavo litri capacita'),
(197, 'euro spesa'),
(198, 'euro spesa ricavo metri'),
(199, 'euro spesa guadagno'),
(200, 'euro spesa metri'),
(201, 'euro'),
(202, 'euro spesa ricavo metri'),
(203, 'euro spesa risparmio'),
(204, 'euro spesa ricavo'),
(205, 'metri quadrati altezza lunghezza'),
(206, 'metri quadrati euro lunghezza'),
(207, 'euro spesa ricavo'),
(208, 'euro'),
(209, 'chilometri minuti'),
(210, 'euro metri vendita incasso ricavo'),
(211, 'euro spesa ricavo'),
(212, 'euro'),
(213, 'euro metri'),
(214, 'euro guadagno'),
(215, 'euro ricavo chilogrammi'),
(216, 'euro ricavo costo'),
(217, 'euro guadagno'),
(218, 'euro costo chilogrammi'),
(219, 'euro costo chilogrammi'),
(220, 'euro costo metri'),
(221, 'euro costo'),
(222, 'euro ricavo costo'),
(223, 'euro costo giorni'),
(224, 'euro costo ricavo guadagno'),
(225, 'euro costo ricavo guadagno'),
(226, 'euro chilogrammi'),
(227, 'euro ricavo costo'),
(228, 'euro quintali costo'),
(229, 'euro costo guadagno'),
(230, 'euro costo guadagno ricavo'),
(231, 'euro costo guadagno ricavo spesa'),
(232, 'euro guadagno'),
(233, 'euro costo guadagno ricavo spesa'),
(234, 'euro costo guadagno ricavo spesa'),
(235, 'euro costo guadagno ricavo spesa'),
(236, 'euro costo guadagno perdita spesa'),
(237, 'euro costo guadagno perdita spesa'),
(238, 'euro costo guadagno perdita spesa'),
(239, 'euro guadagno'),
(240, 'euro costo guadagno ricavo spesa'),
(241, 'euro spesa'),
(242, 'euro spesa costo '),
(243, 'euro spesa ricavo'),
(244, 'euro costo perdita'),
(245, 'euro spesa giorni'),
(246, 'euro costo guadagno ricavo spesa'),
(247, 'euro costo guadagno ricavo spesa'),
(248, 'euro incasso'),
(249, 'euro costo guadagno ricavo spesa'),
(250, 'euro costo guadagno ricavo spesa perdita'),
(251, 'euro incasso'),
(252, 'euro spesa rimanenza'),
(253, 'euro costo guadagno ricavo spesa'),
(254, 'euro costo guadagno ricavo spesa'),
(255, 'euro costo guadagno ricavo spesa perdita'),
(256, 'euro costo guadagno ricavo spesa perdita'),
(257, 'euro guadagno'),
(258, 'euro costo guadagno ricavo spesa'),
(259, 'euro metri prezzo'),
(260, 'euro costo guadagno ricavo spesa'),
(261, 'euro costo guadagno ricavo spesa'),
(262, 'euro costo guadagno ricavo spesa'),
(263, 'euro costo guadagno ricavo spesa'),
(264, 'euro costo guadagno ricavo spesa'),
(265, 'euro costo'),
(266, 'euro costo'),
(267, 'equivalenze chilogrammi peso'),
(269, 'equivalenze litri capacita'),
(268, 'equivalenze metri lunghezza'),
(270, 'equivalenze chilogrammi peso'),
(271, 'equivalenze litri capacita'),
(272, 'equivalenze metri lunghezza'),
(273, 'equivalenze grammi peso'),
(274, 'equivalenze chilogrammi peso'),
(275, 'equivalenze litri capacita'),
(276, 'equivalenze chilogrammi peso'),
(277, 'equivalenze litri capacita'),
(278, 'equivalenze metri lunghezza'),
(279, 'equivalenze grammi peso'),
(280, 'equivalenze litri capacita'),
(281, 'equivalenze metri lunghezza'),
(282, 'equivalenze litri capacita'),
(283, 'equivalenze metri lunghezza'),
(284, 'equivalenze litri capacita'),
(285, 'equivalenze grammi peso'),
(286, 'equivalenze grammi peso'),
(287, 'equivalenze litri capacita'),
(288, 'euro resto'),
(289, 'peso'),
(290, ''),
(291, 'guadagno euro'),
(292, 'guadagno euro'),
(293, 'spesa euro'),
(294, 'spesa euro'),
(295, 'spesa euro'),
(296, 'spesa euro'),
(297, 'spesa euro'),
(298, 'spesa euro ricavo guadagno'),
(299, 'giorni'),
(300, 'peso lordo netto tara'),
(301, 'euro equivalenze peso'),
(302, 'euro lunghezza'),
(303, 'euro'),
(304, 'euro'),
(305, 'euro metri'),
(306, 'euro ricavo'),
(307, 'euro metri'),
(308, 'euro sconto'),
(309, 'litri capacita'),
(310, 'euro spesa'),
(315, 'peso netto lordo tara'),
(316, 'peso netto lordo tara'),
(317, 'peso netto lordo tara'),
(318, 'peso chilogrammi'),
(319, 'peso chilogrammi'),
(320, 'peso netto lordo tara'),
(321, 'peso netto lordo tara'),
(322, 'peso netto lordo tara'),
(323, 'peso netto lordo tara'),
(324, 'peso netto lordo tara'),
(325, 'peso netto lordo tara'),
(326, 'spesa euro ricavo guadagno'),
(327, 'spesa euro ricavo guadagno litri capacita'),
(328, 'spesa euro ricavo guadagno litri capacita'),
(329, 'spesa euro ricavo guadagno litri capacita'),
(330, 'spesa euro ricavo perdita'),
(331, 'spesa euro ricavo guadagno litri capacita'),
(332, 'spesa euro ricavo guadagno'),
(333, 'spesa euro ricavo guadagno'),
(334, 'spesa euro ricavo perdita'),
(335, 'spesa euro ricavo guadagno'),
(336, 'spesa euro ricavo guadagno'),
(337, 'spesa euro ricavo guadagno'),
(338, 'spesa euro ricavo guadagno'),
(339, 'spesa euro ricavo guadagno chilogrammi'),
(340, 'spesa euro ricavo guadagno metri'),
(341, 'equivalenze euro litri capacita'),
(342, 'equivalenze euro costo guadagno ricavo peso'),
(343, 'equivalenze euro litri peso capacita'),
(344, 'equivalenze euro litri capacita'),
(345, 'euro equivalenze chilogrammi peso'),
(346, 'equivalenze metri lunghezza'),
(347, 'equivalenze euro litri capacita'),
(348, 'equivalenze metri lunghezza'),
(349, 'euro equivalenze chilogrammi peso'),
(350, 'equivalenze euro litri capacita'),
(351, 'euro'),
(352, 'euro equivalenze chilogrammi peso netto lordo tara'),
(353, 'equivalenze euro litri capacita'),
(354, 'euro equivalenze chilogrammi peso '),
(355, 'euro equivalenze metri lunghezza'),
(356, 'euro equivalenze spesa guadagno ricavo'),
(357, 'equivalenze euro chilogrammi peso'),
(358, 'equivalenze litri capacita'),
(359, 'euro equivalenze spesa guadagno ricavo'),
(360, 'euro equivalenze'),
(361, 'equivalenze litri capacita'),
(362, 'equivalenze euro chilogrammi peso'),
(363, 'equivalenze litri capacita'),
(364, 'euro equivalenze metri lunghezza'),
(365, 'equivalenze litri capacita'),
(366, 'euro equivalenze spesa guadagno ricavo'),
(367, 'euro equivalenze metri lunghezza'),
(368, 'euro equivalenze spesa guadagno ricavo'),
(369, 'euro equivalenze spesa guadagno ricavo'),
(370, 'equivalenze euro chilogrammi peso'),
(371, 'equivalenze euro chilogrammi peso'),
(372, 'euro equivalenze metri lunghezza'),
(373, 'equivalenze litri capacita'),
(374, 'equivalenze litri capacita'),
(375, 'equivalenze litri peso netto lordo tara'),
(376, 'euro equivalenze metri guadagno'),
(377, 'euro equivalenze spesa guadagno ricavo litri capacita'),
(378, 'equivalenze litri capacita'),
(379, 'euro equivalenze spesa guadagno ricavo litri capacita'),
(380, 'chilogrammi equivalenze metri lunghezza'),
(381, 'ricavo guadagno costo euro'),
(382, 'vendita ricavo perdita costo euro'),
(383, 'vendita guadagno spesa euro'),
(384, 'acquisto rivendita guadagno ricavo euro hg'),
(385, 'acquisto rivendita guadagno ricavo euro hg'),
(387, 'euro vendita ricavo quantità'),
(388, 'acquisto vendita guadagno ricavo euro'),
(389, 'acquisto vendita guadagno ricavo euro'),
(390, 'peso netto peso lordo tara kg'),
(391, 'peso netto peso lordo tara kg'),
(392, 'peso netto peso lordo tara kg'),
(393, 'peso netto peso lordo tara kg equivalenze'),
(394, 'peso netto peso lordo tara g'),
(395, 'peso netto peso lordo tara kg'),
(400, 'acquisto rivendita guadagno ricavo euro'),
(401, 'spesa guadagno ricavo euro'),
(402, 'spesa guadagno ricavo euro '),
(403, 'spesa guadagno ricavo euro metri'),
(404, 'spesa guadagno ricavo euro costo'),
(405, 'spesa guadagno ricavo euro costo litri capacita'),
(406, 'spesa guadagno ricavo euro costo metri'),
(407, 'spesa guadagno ricavo euro costo chilogrammi'),
(411, 'euro costo metri'),
(412, 'euro costo litri equivalenze spesa capacita'),
(413, 'spesa guadagno ricavo euro costo'),
(414, 'spesa guadagno ricavo euro costo'),
(415, 'guadagno ricavo euro costo'),
(426, 'spesa guadagno ricavo euro costo dozzine'),
(427, 'spesa guadagno ricavo euro costo'),
(428, 'spesa guadagno ricavo euro costo'),
(429, 'spesa guadagno ricavo euro costo litri capacita'),



ho tolto un pò di record x non farla troppo lunga...
 

Discussioni simili