PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr

PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr (https://www.php-resource.de/forum/)
-   Off-Topic Diskussionen (https://www.php-resource.de/forum/off-topic-diskussionen/)
-   -   lovecalc (https://www.php-resource.de/forum/off-topic-diskussionen/99222-lovecalc.html)

chrissi11 04-04-2010 13:30

lovecalc
 
hey zusammen mal wieder :)
frohe ostern wünsch ich erstmal...

ich hab mal wieder die eine oder andere idee gehabt wobei ich mal wieder auf dem schlauch stehe.

wie der titel schon sagt hätt ich gern sowas wie ein liebesrechner.

dabei würd ich gern den vornamen in einen zahlenwert wandeln.
das gilt für zwei personen. diese beiden zahlenwerte sollen zusammengefügt werden und dann soll daraus eine prozentangabe entstehen.

jetzt hab ich 2 probleme:

mit welcher funktion schaff ich es aus einem string einen zahlenwert zu machen.
die zahlen addieren wird ja ned so schwer sein..und wie bekomm ich es dann so hin, das aus diesen beiden eine prozentzahl entsteht.
sprich 0 - 100.
ich weiß leider nicht wonach ich mich da richten könnte..vielleicht habt ihr eine idee oder sogar was ganz anderes für mich?
ins php handbuch schon geschaut und die suche auch genutzt..
aber um ehrlich zu sein weiß ich nicht genau wonach ich suchen muss.
mit time() hat das keinen sinn, weil das den wert halt immer wieder verändern würde.. daher die sache mit dem string.

google brachte mir ned mal ein ergbnis für eine gute beispieldatei wo ich mal abluchsen hätte können :/

wäre klasse ..danke euch schonmal :)

viele grüße

svr 04-04-2010 13:57

frohe ostern ;)

ich habe da prinzipiell zwei gedanken:
string->int
klingt irgendwie nach intval oder? wäre aber eine denkbar blöde lösung!

nun, das ganze würde ich so angehen: als erstes per strlength länger ermitteln, dann jeweils einen char isolieren, substr, den rest in eine tmp variablen speichern, dann den ersten char mittels ord in ascii umrechnen. und das ganze so lange, bis du alle chars umgerechnet hast. dann fügst du die werte zusammen und hast deine zahl ;)

an der stelle ord, kannst du natürlich eine function zwischenschalten, nur ord ist ja für lovecalc etwas einfach, muss ja nach etwas aussehen!
eventuell kannst du mir crc32 arbeiten und das dann in undendlich unübersichtlichen operationen verändern.

zum prozentrechnen: in diesme falle brauchst du einen absoluten wert, das sagt die mathematik: xx% von etwas.

ich hoffe, das hilft dir etwas. falls du mit dem php probleme hast, sag besheid, ich hefe gerne

chrissi11 04-04-2010 14:24

hey :) danke erstmal für die rasche antwort :)

ich habs mal mit intval probiert. ich glaub ich mach da was falsch..ich bekomme da generell immer 0 raus.
mal zu deinem beispiel. also, ich hab noch nicht sooo viel erfahrung mit php, darum müsstest dich vielleicht etwas klarer ausdrücken *gg..

gibts vielleicht eine methode die ganze zeichenkette in eine zahl umzuwandeln
ohne jeden einzelnen auseinanderzunehmen? ich wüsste sonst nicht wie ich das angehen sollte :/

ja genau, und dann ist da das problem das ich ja den prozentwert von etwas ermitteln will.. aber was? von 100% ?
hm..brauche wohl doch noch etwas mehr hilfe

danke dir schonmal :)

liebe grüße

svr 04-04-2010 14:44

ok, kein problem.
sagt ja, dass intval etwas blöd sei ;)
wenn du beispielsweise $foo = 11c; hast, dann ist das vertretbar.

ich habe eine ähnliche funktion einmal gesucht, um strings in int zu verwandeln. allerdings nicht wirklich fündig geworden, deshalb habe ich das ganze mit substr gemacht.

als erstes ermittelst du deinen stringlänge mittels $var1 = strlen();
dann setzt du eine variable (bsp $var2) auf $var2 = $var1 - 1; $after ist nun 0.
bei hallo wäre das jetzt also 4 für $var2: nun nur noch den kehrwert von $var2, sprich -4.
jetzt nimmst du deinen substring von deinem string, sprich so

substr('hallo',$after, $var2 ); ->substr('hallo', 0, -4)
das gibt die a zurück. als nächstes beide variablen (after, var2) um eins erhöhen und das ganze so lange, bis der string durchlaufen ist.

andere möglichkeit wäre da sganze mit (int)
sähe so aus:
$int = (int)$string; //type cast

hier noch einige links:
PHP: substr - Manual
PHP: ord - Manual
PHP: strlen - Manual

falls noch hilfe benötigt wird, sag bescheid!

chrissi11 04-04-2010 15:14

okay, so weit bin ich nun schonmal
PHP-Code:

$name "hallo";
$name2 "test";

$str strlen($name);

$var1 $str;

$str strlen($name2);

$var2 $str

jetzt hab ich die zeichenlängen der beiden namen..

das hier versteh ich gerade allerdings nicht..

ich soll var2 auf var2 setzen? dann den wert von var1 auf var2 setzen und var1 subtrahieren mit 1? versteh ich ned...

---
dann setzt du eine variable (bsp $var2) auf $var2 = $var1 - 1; $after ist nun 0.
---

svr 04-04-2010 17:38

entschuldige mich, war gestern abend etwas länger ;)
ich hab das mit dem kerhwert etwas zu umständlich gedacht, geht viel einfacher.
folgendes programm gibt die ascii werte eines string aus.

PHP-Code:

$string 'hallo'// der string, den man lesen will
$var1 0//brauchen wir später
$var2 strlen($string);
$values =array(); //hier speichern wir ascii werte für $string


while($var1<$var2){ //das ist die bedingung
    
$val ord($string[$var1]); //hier kommt des ascii wert des aktuellen chars heraus
    
echo $val."\n"//hier geben wir das aus, geht natürlich in einem schritt
    
array_push($values$val); //hier schreiben wir das in das vorher definierte array
    
$var1++; //hier inkrementiere wir das, um nicht den selben char zu lesen
}
// das ganze steht nun im array, das bei 0 zu lesen beginnt, deshalb $var = 0; am anfang
// das array kannst du nun mit einer foreach schleife durchgehen und jeweils zu einem wert, den nächsten aus dem array addieren.
// dann hast du den gesamten string als ascii wert
//willst du diesen "algorithmus" verändern, dann musst du vor array push ansetzen oder nach der foreach schleife, die dir deinen absolutwert errechnet 


TobiaZ 04-04-2010 18:12

Du hast doch eigentlich ein Konzeptionelles Problem, dass du nichtmal den algorithmus kennst, den du verwenden willst.

also, erstmal nen Algorithmus ausdenken (das versucht svr gerade für dich) und dann kommt die Implementierung. So lange es nichts zu implementieren gibt, verschiebe ich es mal nach OT. ;)

svr 04-04-2010 18:49

exakt ;)
das sollte dir zuerst klar werden. wie genau du die werte errechnen willst!

hab mir mal gedanken gemacht: man könnte anhand des wertes verschiedene divisionsoperationen (fibonacci zahlen) durchführen, sodass man auf einen wert >100 kommt. dann kann man nämlich einfach sagen->wert->prozentwert ;)

bei fragen, melde dich!

chrissi11 04-04-2010 19:45

@tobi..du sagst es...hab ich doch schon von anfang an aufn tisch gelegt ;)


danke, ich glaube der ansatz ist ganz gut.
hab das mal eben ausprobiert aber muss gestehn das ich das erstmal alles richtig begreifen musste..mein problem ist halt das ich absolut nicht weiter weiß, selbst wenn ich nun die ascii werte habe und die anschließend mit foreach zusammenrechne.

da komm ich auf nen wert von 528 bei dem wort hallo um mal dabei zu bleiben...was soll ich mit dem machen? *kopf@tisch..

habt ihr alle studiert oder so ? *lach.. fibonacci..noch nie zuvor gehört..hab mich aber eben mal schlau gemacht..so isses ned ;) aber wenn ich das nun in meinem script anwenden wollte *weia..nomma kopf@tisch :D

gibts nicht was einfaches für doofe sozusagen? *gg bin doch noch ned so lang in der matherie *snief

ok, also angenommen ich habe nun diese 528..der wert fällt ja sehr unterschiedlich aus..je nach länge und ascii wert des namens dementsprechend..
nun soll ich diesen wert als prozentwert verwenden..also 52,8% ?
dann fällt die wahrscheinlichkeit ne quote von 100% zu bekommen sehr gering aus , oder hab ich das schon wieder falsch verstanden?

TobiaZ 04-04-2010 19:50

Das hat nichts mit studiert oder ähnliches zu tun. solche Rechner gibt es zu Hauf im Netz. Und Jamba kanns doch auch...

Wenn ich keinen Plan hab, was ich will, würd ich mich erstmal fragen, warum ich "das" dann überhaupt machen will. Wie gesagt, bist sicher nicht der erste, der so etwas anbietet und da du nun wirklich keinen Plan (und damit meine ich nicht die Programmierung) hast, wird dein Ergebnis/Angebot zwangsläufig schlechter ausfallen.

Also, was soll der Aufwand? Genieß die Freizeit. ;)

chrissi11 04-04-2010 20:01

jaja, hast ja recht mensch..sitze doch schon aufm arsch und lerne und probiere und mache und tute usw..bin halt komisch..manchma brauch ichn arschvoll :huep: ..nicht in diesem sinne ;) aber ma nen kopf@tisch für nen denkanstoß :)

svr 04-04-2010 20:59

ich bin immer froh, wenn mir jemand hilft, desegen helfe ich dir auch ;)
wenn du fragen hast, dann frag ;)

habe dir im "quelltext-chen" viele bunte kommentare geschrieben, das müsste klar sein. sind nur standartfunktionen. ord, strlen,...

nun, was du mit den ascii werten machst? das ist dein problem, die methode über ascii ist nur eine von sicher vielen möglichkeiten. so habe ich es damals gelöst. du kannst auch den type cast machen, du kannst aber auch jedem char einen (hex/okta-dezimalen) wrt zuordnen, sprich a wird zu 234, b zu 23 usw....
da ist deine kreativität grenzenlos.

fibonacci, nunja, du kannst auch primzahlen verwenden, du kannst potenzen verwenden, du kannst ausnahmen für gerade zahlen einbauen, du kannst alles tun, was dir spass macht.
bei der programmierung helfe ich dir natürlich gerne ;)

chrissi11 05-04-2010 18:46

hey, das ist aber nett von dir :) danke :)

aber ich habe mir gestern nochmal überlegt ob ich nicht etwas viel simpleres
nehme. Ich rede von wahrheitswerten. also da es sich ja hierbei um eine community handelt wäre das vielleicht sinnvoller..so wie z.b zwei profile abgleichen, interessen unter anderem, dann gewisse punkte vergeben ob der user schon in der freundesliste ist oder nicht..solche sachen halt. dann wie regelmäßig miteinander geschrieben wird usw.. ich glaube das ist ne sache die sich dann vielleicht doch mehr rentiert als son oller zahlengenerator. obwohl mich die matherie an sich natürlich brennend interessiert.
mist...mal sehen

fireweasel 06-04-2010 01:02

Brutal und einfach:

PHP-Code:

///
/// return STR() similarity in percent
function lovetest_nameletter($name1$name2) {
    
// der Rückgabewert ist eine Integerzahl
    // den (praktischeren) Prozentwert findet man in $percent
    
similar_text(
        
strtolower($name1),
        
strtolower($name2), 
        
$percent
    
);
    return 
sprintf('%0.02f'$percent);


Ich vermute, der Jamba-Name-Love-Tester ist auch nicht komplizierter aufgebaut. ;)

Die Funktion similar_text() vergleicht zwei Zeichenketten auf ihre "Ähnlichkeit". Eine genauere Erläuterung findest du im PHP-Handbuch.

chrissi11 06-04-2010 08:00

naja, ich hatte da auch nochmal eins gefunden:

PHP-Code:

class lovecalc {
    
/**
    * @return lovecalc
    * @param string $firstname
    * @param string $secondname
    * @desc Konstructor
    */
    
function lovecalc ($firstname$secondname) {
        
$this->lovename strtolower(preg_replace("/ /","",strip_tags(trim($firstname.$secondname))));
        
$alp count_chars($this->lovename);
        for(
$i=97;$i<=122;$i++){
            if(
$alp[$i]!=false){
                
$anz strlen($alp[$i]);
                if (
$anz<2)
                { 
                
$calc[] = $alp[$i]; 
                }
                else
                { 
                for(
$a=0;$a<$anz;$a++)
                { 
$calc[] = substr($alp[$i],$a,1); }
                }
            }
        }
        
        while ((
$anzletter count($calc))>2) {
            
$lettermitte ceil($anzletter/2);
            for(
$i=0;$i<$lettermitte;$i++)
            {
                
// Just a little bit SHIFT :D
                
$sum array_shift($calc)+array_shift($calc);
                
$anz strlen($sum);
                if (
$anz<2)
                {
                
$calcmore[] = $sum;
                }
                    
                else
                { 
                for(
$a=0;$a<$anz;$a++){ $calcmore[] = substr($sum,$a,1);
                } 
              }
            }
            
$anzc count($calcmore);
            
            for(
$b=0;$b<$anzc;$b++)
            { 
            
$calc[] = $calcmore[$b]; 
            }
            
            
array_splice($calcmore,0);
        }
        
        
$this->lovestat $calc[0].$calc[1];
    }
    
/**
    * @return int
    * @desc Show result
    */
    
function showlove () {
        return 
"$this->lovestat";
    }


$name1 "karsten";
$name2 "mareike";

$my_love = new lovecalc($name1,$name2);// New instance
echo $my_love->showlove(); // Show 

aber ich mach das dann nun doch auf meiner zuletzt beschriebenen art und weise..dann kann wenigstens behauptet werden das an der berechnung was dran ist :D anstatt solcher werte..kommt denk ich mal besser


Alle Zeitangaben in WEZ +2. Es ist jetzt 03:56 Uhr.

Powered by vBulletin® Version 3.8.2 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.0
[c] ebiz-consult GmbH & Co. KG