Autor Zpráva
helmut 456
Profil *
Zdravím,
potřeboval bych vytvořit následující podmínku:
1) mám proměné např x='auto, bagr, tramvaj, trolejbus' a y='cukr, kava, caj'
2)poté mám proměnou z='tramvaj, letadlo, bagr, kava'
3)potřebuju zjistit, zda je alespoň jedno slovo z přoměných x a z je stejné a pokud ano, tak vypíšu např ok a skončím.
4)pokud se ani jedna shoda nenajde, tak porovnám přoměné y a z, pokud je minimálně jedno slovo shodné, vypíšu ok2 a pokud neni nic shodné vypíšu neni

Jen ještě poznamenám, že je uplně jedno, jestli je tam jedna nebo více shod, takže po nalezení jakékoliv první shody může program končit.
V proměnné je vždy slovo, slovo2, slovo3

Napadá někoho, jak toto udělat pomocí php?
Nějak nemůžu nic vymylet..
mimochodec
Profil
helmut 456:

Obsah těch x, y, z převedeš na pole: http://cz1.php.net/manual/en/function.explode.php
Položky těch polí ořežeš o nadbytečné mezery: http://cz1.php.net/manual/en/function.trim.php
Položky polí porovnáš proti sobě ve vnořených cyklech: http://cz1.php.net/manual/en/control-structures.foreach.php

Zkus z toho něco zkonstruovat, pak se případně ptej konkrétněji.
helmut 456
Profil *
Díky za radu,
bod 1 je jasný, ořezání je mi taky jasné, nicméně to nebudu potřebovat, ale moc jsem nepochopil jak porovnat ty 2 pole, aby se porovna každý znak s každým a ne pouze první s prvnim a druhý s druhym.

Nemohl bys prosím na příkladu ukázat, jak porovnat tyto 2 pole? jde mi o to, aby to vyhodilo, jsou minimálně 2 stejné, nebo nejsou stejné.
<?php
$x  = "auto, bagr, tramvaj, trolejbus";
$y  = "cukr, kava, caj";
$xpole = explode(", ", $x);
$ypole = explode(", ", $y);
?>
mimochodec
Profil
helmut 456:
$nalezeno = "";

foreach ($xpole as $xhodnota) {
  foreach ($ypole as $yhodnota) {
    if ($xhodnota == $yhodnota) {
      $nalezeno = $xhodnota;
      break;
    }
  }
}

Jen nevím, jak zařídit, aby se v případě toho nalezení uteklo i z toho x cyklu. Ale to je věc spíš kosmetická a nevýznamná, pokud nepůjde o desetitisíce položek.
A nezapomeň si někde ty hodnoty otrimovat, třeba v tom ifu.
xROAL
Profil
mimochodec:
Jen nevím, jak zařídit, aby se v případě toho nalezení uteklo i z toho x cyklu.
breaku (rovnako aj pri continue) môžeš dať číselný agrument, ktorý hovorí "o koľko úrovní" má vyskočiť. V tomto prípade by to teda bolo break 2;, prvý break je von z "y cyklu" a druhý break je von z "x cyklu".
mimochodec
Profil
Nevylučuju, že někdo přijde s tím, že na to existuje vyloženě nějaká php funkce. Teď v rychlosti jsem našel i jiné řešení. Připadalo by v úvahu, kdybys měl jistotu, že každé to slovo je v tom jednom poli jen jednou. Pak by stačilo ta pole sloučit a:

if(count(array_unique($array))<count($array)) {
    // Array has duplicates
} else {
    // Array does not have duplicates
}

Zdroj: http://stackoverflow.com/questions/1170807/how-to-detect-duplicate-values-in-php-array


xROAL:
breaku (rovnako aj pri continue) môžeš dať číselný agrument, ktorý hovorí "o koľko úrovní" má vyskočiť.

Pěkné, díky, neznal jsem.
Tori
Profil
Není od věci procvičit si procházení cyklů, ovšem máme i array_intersect
mimochodec
Profil
Tori:
Já jsem to tušil, jsi zlá! :-)
helmut 456
Profil *
Tak jsem to dal dohromady a tadyto jsem z toho vykoumal :)
Všem moc děkuji za pomoc :)
$x  = "auto, bagr, tramvaj, trolejbus";
$y  = "cukr, kava, caj";
$z  = "ff, fff, ff, fff";
$nalezeno = "";
$xpole = explode(", ", $x);
$ypole = explode(", ", $y);
$zpole = explode(", ", $z);
$result = array_intersect($xpole, $zpole);
if (empty($result)) { echo "greeen";}
if (!empty($result)) { echo "blue";}
mimochodec
Profil
helmut 456:
A co $ypole?
DarkMeni
Profil
u tý podmínky nakonci stačí použít else (nemusíš psát 2 podmínky)
helmut 456
Profil *
mimochodec: to tam pak přidám bohužel nemam ted čas a neumazal jsem to stejně jako 'nenalezeno'
DarkMeni: díky za tip :)

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: