Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Poređenje current-nih reči iz dva array-a

[es] :: PHP :: Poređenje current-nih reči iz dva array-a

[ Pregleda: 1717 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek

Član broj: 91953
Poruke: 241
*.dynamic.isp.telekom.rs.

Sajt: www.PaunDurlic.com


+2 Profil

icon Poređenje current-nih reči iz dva array-a29.08.2012. u 16:40 - pre 92 meseci
Zadatak: treba da uporedim dve liste reči, ubačene u dva niza, da bih otkrio koje se reči drugog niza ne sadrže u prvom nizu.
Testiranjem sledećeg koda, utvrdio sam da se uspešno listaju oba nizu, i da se svaka reč iz jednog niza upoređuje sa svakom rečju iz drugog niza.
Problem je što sam ISCRPIO sve "odguglovane" načine poređenja dva tekuća stringa, i ni jedan nije uspeo, pa molim za pomoć.
Napominjem da je baza UTF-8, i da se reči izvlače sa ... LIKE '%$uslov%' collate utf8_bin.

Code:
//spoljna petlja, prolazi kroz $PrviNiz
do {
   $RecIzPrvogNiza=rtrim(current($PrviNiz));
   reset($DrugiNiz);
   $i = 0;

   //unutrašnja petlja, ide kroz $DrugiNiz i upoređuje 
   do {    
        $RecIzDrugogNiza = current($DrugiNiz);       
        
        //provera da li su iste
        //probao sam sve što sam našao u turorijalima
        //ni jedna ne deluje
        //treba mi pomoć kako da napišem ovaj uslov:
  
        if ($RecIzPrvogNiza == $RecIzDrugogNiza)
           {
           $i++; 
           }
    } 
    while (next($DrugiNiz));
    if ($i=0)
       {
       echo $RecIzDrugogNiza." <br>"; //pošto je brojač = 0, znači da ova reč
                                                   //nema svoj par u $PrviNiz
       }
  } 
  while (next($PrviNiz));


U svim drugim, veoma komplikovanin situacijama, koje može samo programer sluhista da smisli, operacije sa stringovima nisu bile problem.
Ovaj mi je dušu pojeo, i neću imati sa čime pred Svetoga Petra, ako mi neko ne pomogne!
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Humanity d.o.o.
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-9.sezampro.rs.

Sajt: www.nikolaposa.in.rs


+33 Profil

icon Re: Poređenje current-nih reči iz dva array-a29.08.2012. u 17:43 - pre 92 meseci
Iskoristi array_diff:
Code:
$razlika = array_diff($drugiNiz, $prviNiz);

 
Odgovor na temu

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek

Član broj: 91953
Poruke: 241
*.dynamic.isp.telekom.rs.

Sajt: www.PaunDurlic.com


+2 Profil

icon Re: Poređenje current-nih reči iz dva array-a29.08.2012. u 18:01 - pre 92 meseci
Na žalost, iz nekog razloga ne deluje!
Probao sam:
Code:
$razlika = array_diff($drugiNiz, $prviNiz);
print_r($razlika);

i dobijam CEO $drugiNiz, kada obrnem redosled poređenja, dobijem pak CEO $prviNiz!
Kao da su nizovi u celosti različiti, a nisu!
 
Odgovor na temu

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek

Član broj: 91953
Poruke: 241
*.dynamic.isp.telekom.rs.

Sajt: www.PaunDurlic.com


+2 Profil

icon Re: Poređenje current-nih reči iz dva array-a29.08.2012. u 18:35 - pre 92 meseci
Ovo je prava Zona sumraka.
Kada u mom prvom primeru, promenljivoj $RecIzPrvogNiza dodelim neku konkretnu reč, ona je nalazi bez problema.
Ali kada je preuzima iz niza preko petlje, pravi se mutav, mada je uredno "ecuje"!

Code:

$RecIzPrvogNiza = 'sîpaļigă';
if ($RecIzPrvogNiza == $RecIzDrugogNiza) 
   {
    $i++; 
    }

 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 400
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Poređenje current-nih reči iz dva array-a29.08.2012. u 20:39 - pre 92 meseci
Probaj ovako:
Code:
<?php

$prviNiz = array("jabuka", "banana", "ananas", "narandza", "limun");
$drugiNiz = array("balon", "lopta", "jabuka", "banana", "ananas", "voda", "tastatura");

foreach ( $drugiNiz as $niz2) {
   
   if ( !in_array($niz2, $prviNiz) ) { ?>
   <div>Rec: <b><?=$niz2?></b> se NE nalazi u prvom nizu</div><?php 
   }
}
?>
<hr />
<?php
foreach ( $prviNiz as $niz1) {
   
   if ( in_array($niz1, $drugiNiz) ) { ?>
   <div>Rec: <b><?=$niz1?></b> se nalazi u drugom nizu</div><?php 
   }
}
?>
<hr />
Debug: 
<div><?=print_r($prviNiz) ?></div>
<div><?=print_r($drugiNiz) ?></div>

Takodje, koristi funkciju trim umesto rtrim u tvom primeru jer možda postoji prazno mesto pre stringa koje se "ne vidi".
Ako nizovi nemaju isti broj stringova, onda niz sa većim brojem stringova uporedjuješ sa manjim (kako bi "provukao" sve reči kroz petlju). Za to koristiš count($prviNiz) ili count($drugiNiz) funkciju.
Ukoliko imaš case-sensitive stringove koristi strtolower ili strtoupper kako bi iste reči bile identične (mala/velika slova).
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 839
*.stat.customer.blic.net.



+142 Profil

icon Re: Poređenje current-nih reči iz dva array-a30.08.2012. u 07:14 - pre 92 meseci
Cisto da sumiram sta je vec receno, ovaj kod mora da radi:

Code:


$prviNiz = array("jabuka", "banana", "ananas", "narandza", "limun");
$drugiNiz = array("balon", "lopta", "jabuka", "banana", "ananas", "voda", "tastatura");

echo 'Rijeci iz prvog niza koje se ne nalaze u drugom: ' . implode(', ', array_diff($prviNiz, $drugiNiz));
echo 'Rijeci iz drugog niza koje se ne nalaze u prvom: ' . implode(', ', array_diff($drugiNiz, $prviNiz));



Ukoliko array_diff ne nalazi iste rjeci u oba niza (a smatrate da one postoje), samo provucite clanove oba niza kroz trim() da se uklone nevidljivi karakteri.

Code:

// "ciscenje nizova"
foreach($prviNiz as &$rijec) { $rijec = trim($rijec); }
foreach($drugiNiz as &$rijec) { $rijec = trim($rijec); }


ili, jos bolje, kod iz php manuala:

Code:

<?php
function trim_value(&$value) 

    $value = trim($value); 
}

$fruit = array('apple','banana ', ' cranberry ');
var_dump($fruit);

array_walk($fruit, 'trim_value');
var_dump($fruit);

?>

 
Odgovor na temu

VladaSu

Član broj: 31634
Poruke: 1058
*.dynamic.isp.telekom.rs.



+210 Profil

icon Re: Poređenje current-nih reči iz dva array-a30.08.2012. u 10:15 - pre 92 meseci
@peromalosutra
ovaj poslednji kod (ili poslednja dva) bolje
Code (php):

<?php
$fruit = array('apple','banana ', ' cranberry ');
$fruit = array_map('trim', $fruit);
var_dump($fruit);

?>
 

[Ovu poruku je menjao VladaSu dana 14.06.2003. u 11:22 GMT+1]
 
Odgovor na temu

pakito
Paun Es Durlic
kustos etnolog (u penziji!) i programer
naivac
Majdanpek

Član broj: 91953
Poruke: 241
*.dynamic.isp.telekom.rs.

Sajt: www.PaunDurlic.com


+2 Profil

icon Re: Poređenje current-nih reči iz dva array-a30.08.2012. u 12:30 - pre 92 meseci
Citat:
peromalosutra:

Ukoliko array_diff ne nalazi iste rjeci u oba niza (a smatrate da one postoje), samo provucite clanove oba niza kroz trim() da se uklone nevidljivi karakteri.



U zonu sumraka sam upao, i uvuko još vas nekoliko, sapleten o jedno suvišno "r": dakle, kada sam ga obrisao iz rtrim(), sve je proradilo!
(a ti suvišni karakteri su se ulepili u string jer sam ga ja pravio kraćenjem dužeg stringa!)

Pošto je između više mogućnosti najbolji ispao primer sa array_diff(), evo kompletnog koda koji mi sada sjajno rešava problem:

Code:
echo "<table border=0 width=200 cellspacing=1 id=table1>";
echo "<tr>";
  $razlika = array_diff($prviNiz, $drugiNiz);
  $k = 0;
  do {
     $k++;
     $poveznica = current($razlika);
     echo "<td width=38 align=right>".$k." </td>";
     echo "<td align=left>".$poveznica."</td>"; 
     echo "</tr>";
     }
     while (next($razlika));    
     echo "</table>";


Za nagradu svima koji su mi do sada pomagali na ovome forumu, poklanjam link na Vlaški rečnik koji sutra, 1. IX 2012. puni tačno godinu dana!
http://www.paundurlic.com/vlaski.recnik/index.php

Za muzičke sladokusce, koji žele da čuju nestvarno lepo vlaško pevanje, sa prilikom da pročitaju i tekst pesme, poklanjam ovaj link:
[url=mailto:http://www.paundurlic.com/vlas...larec.php?action=upd&id=86][/url]
 
Odgovor na temu

peromalosutra
Ivan Rajkovic
Software engineer
Luxoft
Berlin

Član broj: 54774
Poruke: 839
*.stat.customer.blic.net.



+142 Profil

icon Re: Poređenje current-nih reči iz dva array-a30.08.2012. u 12:31 - pre 92 meseci
Da, to sam predvidjeo.

Da ne bude prazan post, evo kompletnog koda :)

Code:

$prviNiz = array("jabuka", "banana", "ananas", "narandza", "limun");
$drugiNiz = array("balon", "lopta", "jabuka", "banana ", "ananas", "voda", "tastatura");

$prviNiz = array_map('trim', $prviNiz);
$drugiNiz = array_map('trim', $drugiNiz);

echo 'Rijeci iz prvog niza koje se ne nalaze u drugom: ' . implode(', ', array_diff($prviNiz, $drugiNiz));
echo 'Rijeci iz drugog niza koje se ne nalaze u prvom: ' . implode(', ', array_diff($drugiNiz, $prviNiz));


edit: @pakito: drago mi je da ste rijesili problem :)

 
Odgovor na temu

ivan.a
PHP developer

Član broj: 83976
Poruke: 400
*.dynamic.isp.telekom.rs.



+44 Profil

icon Re: Poređenje current-nih reči iz dva array-a30.08.2012. u 14:26 - pre 92 meseci
Citat:
pakito:
U zonu sumraka sam upao, i uvuko još vas nekoliko, sapleten o jedno suvišno "r": dakle, kada sam ga obrisao iz rtrim(), sve je proradilo!

Pretpostavio sam da je potrebno da ukloniš prazna polja sa obe strane stringa koristeći trim funkciju (ranije sam već spomenuo), jer onaj kod koji je Nikola Poša napisao u prvom postu radi savršeno, osim u navedenom slučaju. Takođe, za case-sensitive znakove koristi strtolower() funkciju na isti način kao trim() kako bi eliminisao razliku između malih/velikih slova (ukoliko je potrebno).
I hope I didn't brain my damage - Homer
if (wife.position == kitchen) {return sandwich};
 
Odgovor na temu

[es] :: PHP :: Poređenje current-nih reči iz dva array-a

[ Pregleda: 1717 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.