SELFPHP: Version 5.8.2 Befehlsreferenz - Tutorial – Kochbuch – Forum für PHP Einsteiger und professionelle Entwickler

SELFPHP


Professional CronJob-Service

Suche



CronJob-Service    
bei SELFPHP mit ...



 + minütlichen Aufrufen
 + eigenem Crontab Eintrag
 + unbegrenzten CronJobs
 + Statistiken
 + Beispielaufrufen
 + Control-Bereich

Führen Sie mit den CronJobs von SELFPHP zeitgesteuert Programme auf Ihrem Server aus. Weitere Infos



:: Buchempfehlung ::

Fortgeschrittene CSS-Techniken

Fortgeschrittene CSS-Techniken zur Buchempfehlung
 

:: Anbieterverzeichnis ::

Globale Branchen

Informieren Sie sich über ausgewählte Unternehmen im Anbieterverzeichnis von SELFPHP  

 

:: Newsletter ::

Abonnieren Sie hier den kostenlosen SELFPHP Newsletter!

Vorname: 
Name:
E-Mail:
 
 

Zurück   PHP Forum > SELFPHP > PHP Grundlagen
Hilfe Community Kalender Heutige Beiträge Suchen

PHP Grundlagen Hier kann über grundlegende Probleme oder Anfängerschwierigkeiten diskutiert werden

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 25.05.2014, 15:41:13
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
Arrays addieren mit Bedingung

Hallo,
ich habe zwei Arrays:
$array1 = [01]=> 12,$array1 = [02]=> 12,$array1 = [03]=> 34,...
$array2 = [01]=> 42,$array2 = [02]=> 66,$array2 = [04]=> 89,...
Also im Prinzip 2 Arrays mit den Monatszahlen als Schlüssel. Belieige Zahlen als Werte.
Nun möchte ich dei Arrays Schlüsselweise addieren.
Also $array1[01] => 12 mit $array2 = [01]=> 42 usw. Es kann aber sein, dass in beiden oder einem von beiden ein Monat nicht erfasst ist.
Wenn in Array 1 zB der Schlüssel 3 existiert , in array 2 nicht, steht in array summe an Pos 3 der Wert aus Array1 und umgekehrt. Ist der Monat in beiden Arrays nicht vorhanden, soll der Schlüssel mit dem Wert 0 eingefügt werden. Also zB für [8] gbt es keine Werte. => [8]=0;

Eine Idee ist, einfach stumpf zuaddieren und dann in ner Schleife zu testen ob alle Schlüssel da sind. Die nict vorhandenen einfach hinzufügen und dann array_sort.

Nun kommt das große Aber:
Im zweiten Schritt sollen mehrere Jahre erfasst werden. Daher werde ich wahrscheinlich nicht drum herum kommen statt der Monatszahlen als Schlüssel nen Datumsstring zu
nehmen:
$array1['Jan 14'] => 12, $array1['Feb 14'] => 46, ...
weil sonst habe ich nachher 2x 12 oder 2 x 01 drin.


Ist es verständlich? Zusammengefasst:
Ich möchte zwei Arrays Schlüsselweise addieren. Wenn der Schlüssel in beiden Arrays nicht existiert, soll er hinzugefügt werden.
Danke für die Mühe!
Mit Zitat antworten
  #2  
Alt 25.05.2014, 16:04:13
Benutzerbild von vt1816
vt1816 vt1816 ist offline
Administrator
 
Registriert seit: Jul 2004
Beiträge: 3.707
AW: Arrays addieren mit Bedingung

Nette Darstellung eines Sachverhaltes.

Und Deine Frage? Wie sehen Deine Bemühungen bisher dazu aus?
__________________
Gruss vt1816
Erwarte nicht, dass sich jemand mehr Mühe mit der Antwort gibt als Du Dir mit der Frage.
. . . . . Feedback wäre wünschenswert

Ich werde keinen privaten 1:1 Support leisten, außer ich biete ihn ausdrücklich an.
Ansosnten gilt: Hilfe ausserhalb dieses Thread (PN, WhatsApp, Skype, Mail, ICQ, etc...) nur per Barzahlung oder Vorauskasse!

Wenn man sich selbst als "Noob" bezeichnet, sollte man die Finger davon lassen.
Wenn man gewillt ist daran etwas zu ändern, lernt man Grundlagen!
Mit Zitat antworten
  #3  
Alt 25.05.2014, 16:23:32
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
AW: Arrays addieren mit Bedingung

Natürlich wie addiere ich die Arrays?
Probiert habe ich es mit einer for-Schleife:
1-12
PHP-Code:
for($x=1;$<=12;$x++)
{
if(!isset
$array[$x];
$array[$x]=0;)

Aber aus den genannten gründen geht es schief, sobald ich mehr als 12 Monate habe, also zB 2 Jahre oder 4 und dann Sep und Okt aus 2012 und Jan-Aug aus 2013 und Jan - Dez aus 2011
An dem og Ansatz bastele ich noch. Also ein Array mit allen möglichen Kombis erstellen und dann abfragen drin oder nicht..
Mit Zitat antworten
  #4  
Alt 25.05.2014, 16:59:03
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
AW: Arrays addieren mit Bedingung

PHP-Code:
<?php
         $quartal
= array(1,2,4);
         
$jahre = array(2011,2012,2014);
            
$timestamptime();
            
$datum date("m"$timestamp);
      
$akt_quartal=round($datum 3);
         echo 
$akt_quartal;
         echo 
date("M",$timestamp)." ".date("y",$timestamp);
         
$datumarray[]=0;
         if(
in_array(1,$quartal))
         {
        
         foreach(
$jahre as $key)
         {
         
$datumarray[]="Jan ".$key;
         }
         
              foreach(
$jahre as $key)
         {
         
$datumarray[]="Feb ".$key;
         }
         
              foreach(
$jahre as $key)
         {
         
$datumarray[]="Mär ".$key;
         }
         
         }
          if(
in_array(2,$quartal))
         {
        
         foreach(
$jahre as $key)
         {
         
$datumarray[]="Apr ".$key;
         }
         
              foreach(
$jahre as $key)
         {
         
$datumarray[]="Mai ".$key;
         }
         
              foreach(
$jahre as $key)
         {
         
$datumarray[]="Jun ".$key;
         }
         
         }
          if(
in_array(3,$quartal))
         {
        
         foreach(
$jahre as $key)
         {
         
$datumarray[]="Jul ".$key;
         }
         
              foreach(
$jahre as $key)
         {
         
$datumarray[]="Aug ".$key;
         }
         
              foreach(
$jahre as $key)
         {
         
$datumarray[]="Sep ".$key;
         }
         
         }
          if(
in_array(4,$quartal))
         {
        
         foreach(
$jahre as $key)
         {
         
$datumarray[]="Okt ".$key;
         }
         
              foreach(
$jahre as $key)
         {
         
$datumarray[]="Nov ".$key;
         }
         
              foreach(
$jahre as $key)
         {
         
$datumarray[]="Dez ".$key;
         }
             }
             
             foreach (
$datumarray as $peep)
             echo 
$peep."<br>" ;
?>
So nun hab ich aber :
Jan 2011
Jan 2012
Jan 2014
Feb 2011
Feb 2012
Feb 2014
Mär 2011
Mär 2012
Natürlich muss da sowas rauskommen wie Jan 2011, Feb 2011, Mär 2011,...
Jan 2012, Feb 2012 usw
Mit Zitat antworten
  #5  
Alt 25.05.2014, 17:09:32
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
AW: Arrays addieren mit Bedingung

Zitat:
Zitat von tsunamitsunami Beitrag anzeigen
Hallo,
ich habe zwei Arrays:
$array1 = [01]=> 12,$array1 = [02]=> 12,$array1 = [03]=> 34,...
$array2 = [01]=> 42,$array2 = [02]=> 66,$array2 = [04]=> 89,...
1. Wo kommen die Arrays her?
2. 01 ist für PHP ne Oktalzahl. Ich bin mir sicher, daß Du '01' haben möchtest.

Zitat:
Also $array1[01] => 12 mit $array2 = [01]=> 42 usw. Es kann aber sein, dass in beiden oder einem von beiden ein Monat nicht erfasst ist.
Sowas klärt man mit isset() http://de2.php.net/isset
Und da der Wert von $array1[01] addiert werden soll, ist es ratsam, mit intval() http://de2.php.net/intval für klare Verhältnisse zu sorgen.

btw: Deine weiteren Posts habe ich auch gelesen.
Mit Zitat antworten
  #6  
Alt 25.05.2014, 17:26:07
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
AW: Arrays addieren mit Bedingung

Ok, nun bin ich etwas weiter:
PHP-Code:
     foreach($jahre as $key)
         {
         if(
in_array(1,$quartal))
         {
         
$datumarray[]="Jan".$key;
         
$datumarray[]="Feb".$key;
         
$datumarray[]="März".$key;
         }
        
        if(
in_array(2,$quartal) )
         {
... 
liefert mir genau die Liste wie ich sie haben möchte. Zumindest erstmal in der passenden Reihenfolge.
Das Ganze kann ich nun nutzen um zu addieren bzw. mit "0" auf zu füllen.
Kleiner Schönheitsfehler: Wie kriege ich es hin, dass das Array um die Werte größer dem aktuellen Monat bereinigt wird?
Quartal 3 und 4 2013 OK
Quartal 3 und 4 2014 Humbug. Also müsste es sowas geben wie.
if($laufmonat<= $aktuellermonat und $laufjahr<=$aktuellesjahr)
$datumarray[]="Jan".$key;
Mit Zitat antworten
  #7  
Alt 25.05.2014, 22:46:34
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
AW: Arrays addieren mit Bedingung

Zitat:
Zitat von tsunamitsunami Beitrag anzeigen
Ok, nun bin ich etwas weiter:
Du ja, ich nicht.

Wenn Du gestellte Fragen nicht beantwortest, verliere ich das Interesse an diesem Thema.
Mit Zitat antworten
  #8  
Alt 26.05.2014, 10:15:47
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
AW: Arrays addieren mit Bedingung

Warum so unfreundlich?
Welche Fragen willst Du beantwortet haben?
Wo das Array herkommt ist doch für das Grundproblem völlig egal.
Aber gut, es kommt aus ner Sql-Abfrage.
Und mit array_splice habe ich die Sachen ab Mai 2014 abgeschnitten. Auch gut.
Mehr unbeantwortete Fragen sehe ich nicht.
Nun müsste ich doch irgendwie die beiden urspünglichen arrays addieren. Dabei via diesem Hilfsarray die Schlüssel abfragen und wenn der Schlüssel in beiden Arrays nicht existiert eine 0 hin zufügen.

Und ich kann eine Aktalzahl als Schlüssel vergeben? Ist das für diesen Sachverhalt nicht völlig egal ob ich 01 oder "01" nehme? Da ich ich mehrere Jahre habe hat es sich eh erledigt. Aber normal sind es max 12 . Da ist es doch völlig egal ob die 1,2,3, oder 34, 56,78 oder x,y,z als Schlüssel dienen. Nur eindeutig müssen die sein, oder sehe ich das falsch?
Mit Zitat antworten
  #9  
Alt 27.05.2014, 01:57:41
Benutzerbild von meikel (†)
meikel (†) meikel (†) ist offline
SELFPHP Guru
 
Registriert seit: Dec 2003
Ort: Erfurt
Alter: 76
Beiträge: 4.001
AW: Arrays addieren mit Bedingung

Zitat:
Zitat von tsunamitsunami Beitrag anzeigen
Warum so unfreundlich?
Das isn Forum für Programmierer und keine Wal(d)dorfschule, in der die Scripts vorgetanzt werden.

Zitat:
Welche Fragen willst Du beantwortet haben?
Ich hatte Dir 2 Fragen gestellt, die Du nicht beantwortet hast.

Zitat:
Wo das Array herkommt ist doch für das Grundproblem völlig egal.
Nein, weil das Prinzip, wie das Array indiziert und gefüllt wird, bescheuert ist.

Zitat:
Aber gut, es kommt aus ner Sql-Abfrage.
Aha. Wie sieht die Tabelle aus (CREATE TABLE + paar INSERT INTOS ...)? Wie sieht die Abfrage aus, die offenbar ungeeignet ist, weil Du das Ergebnis noch mit PHP beharken mußt oder (warum auch immer) möchtest?

Zitat:
Und mit array_splice habe ich die Sachen ab Mai 2014 abgeschnitten.
Blödsinn. Sowas klärt man mit der SQL Abfrage. Macht sich natürlich gut, wenn es eine Spalte gibt die entweder den Typ date oder datetime hat.

Zitat:
Nun müsste ich doch irgendwie die beiden urspünglichen arrays addieren.
Laß doch MySQL addieren.
http://dev.mysql.com/doc/refman/5.1/...l#function_sum
Dazu definierst Du in der WHERE Clause den Datumsbereich, den Du als Summe haben möchtest.

Hier:
http://dev.mysql.com/doc/refman/5.1/...functions.html
gibts nen Sack voll Datum- und Zeitfunktionen.

Zitat:
Dabei via diesem Hilfsarray die Schlüssel abfragen und wenn der Schlüssel in beiden Arrays nicht existiert eine 0 hin zufügen.

Und ich kann eine Aktalzahl als Schlüssel vergeben? Ist das für diesen Sachverhalt nicht völlig egal ob ich 01 oder "01" nehme?
Lies Dir doch bitte erst mal ds Handbuch der Sprache(n) durch, mit denen Du hantierst.
01 ist für PHP eine Oktalzahl
'01' ist für PHP ein String.
Bei 00 .. 07 klappts ja noch, aber bei 08 gehts schief, weil es diese Zahl im Oktalsystem nicht gibt. Die heißt dann nämlich 010, aus 09 wird 011 usw.

Zitat:
Da ich ich mehrere Jahre habe hat es sich eh erledigt. Aber normal sind es max 12 . Da ist es doch völlig egal ob die 1,2,3, oder 34, 56,78 oder x,y,z als Schlüssel dienen. Nur eindeutig müssen die sein, oder sehe ich das falsch?
Richtig: Du siehst das falsch. Wäre es richtig, würdest Du hier keine Fragen stellen.

Mach Dich vertraut mit dem ISO Datumsformat:
YYYY-MM-DD hh:mm:ss
MySQL speichert es intern etwas anders ab:
YYYYMMDDhhmmss
Ist so vorteilhaft, weil bequem sortiert werdn kann. 1900-01-01 ist kleiner 2014-12-31

Dieses Datumformat ist natürlich ungeeignet für Otto Normalsurfer. Du kannst aber entweder mit den Datumsfunktionen von MySQL oder unter PHP mit den datetime Klassen:
http://de1.php.net/datetime
weiterverarbeiten.

Falls das Projekt international benutzbar sei soll, dann nutze lieber die PHP Klassen. Die beherrschen unterschiedliche Zeitzonen und kennen auch die Tücken zwischen Sommer- und Winterzeit.

Es gibt noch einige Tücken wenn Du mit Tageszahlen rechnest.
Mit Zitat antworten
  #10  
Alt 02.06.2014, 17:33:17
tsunamitsunami tsunamitsunami ist offline
Junior Member
 
Registriert seit: Dec 2005
Alter: 51
Beiträge: 236
AW: Arrays addieren mit Bedingung

Also, meikel, bei einigen Dingen magst Du Recht haben.
Bei bestimmten Dingen nicht.
Ich habe mir schon etwas beim Aufbau gedacht. Wenn ich mit meinem Polo in die Werkstatt fahre, weil der nicht sauber läuft, will ich keine Grundsatzdiskussion wie Scheiße VW ist und dass Matzda viel besser ist. Und nur weil ich das auto nicht selber repariere heißt es nicht dass ich keine Ahnung habe und nicht gelesen habe oder zu faul zum lesen bin. Und auch da will ich in der Werkstatt nicht hören, mach mal den Führerschein und lese das Handbuch. ;)

Und damit der potentielle Helfer sich nicht durch 10000 Zeilem Code quälen muss, versuche ich das Problem zu beschreiben.
Natürlich weiß ich dass jeder Rechne rmit 0,1 und 2 besser umgehen kann wie mit mit xyz xy1.
Für mein Problem war xy1aber erstmal die bessere Lösung. Alternative wäre ein mehrdimensionales Array gewesen.

Und lass mysql rechnen ist auch eine gute Idee, funktioiert aber für mein Ziel nicht. Nun läuft es wie gewünscht. Und vielleicht kann ich da wieklich irgendwie noch 2 ms rausholen, brauche ich aber nicht.'

Und wen es interessiertIch habe ein stingng mit dem aktuellen Monat und Jahr gemacht.
PHP-Code:
$heute date("M",$timestamp).date("Y",$timestamp);

     foreach(
$jahre_reverse as $key)
         {
         if(
in_array(1,$quartal))
         {
         
$datumarray[]="Jan".$key;
         
$datumarray[]="Feb".$key;
         
$datumarray[]="Mar".$key;
         }
        
        if(
in_array(2,$quartal) )
         {
         
$datumarray[]="Apr".$key;
         
$datumarray[]="May".$key;
         
$datumarray[]="Jun".$key;
         }
         if(
in_array(3,$quartal)  )
         {
         
$datumarray[]="Jul".$key;
         
$datumarray[]="Aug".$key;
         
$datumarray[]="Sep".$key;
         }
         if(
in_array(4,$quartal) )
         {
         
$datumarray[]="Oct".$key;
         
$datumarray[]="Nov".$key;
         
$datumarray[]="Dec".$key;
         }
//***********Jul2013,August2013 usw
              
$i array_search($heute,$datumarray);   
//*********aktuell ist Juni 2014, einn Wert für August 2014 mach keinen Sinn, für August 2013 schon.
  
if(in_array($aktuellesjahr,$jahre))
  {
 
$elementsAfter  array_slice($datumarray0,$itrue);
 }
 else
 
$elementsAfter=$datumarray;
select CONCATDATE_FORMATeinsatzmaterial.datum,'%b' ),' ',DATE_FORMATeinsatzmaterial.datum'%Y' ) ) as monatszahl,sum(quittungen.vk_preis*einsatzmaterial.menge) as materialsumme_monat_zeit from einsaetze,quittungeneinsatzmaterial where quittungen.id einsatzmaterial.quittungs_id and quarter(einsatzmaterial.datumin (1,2,3,4) AND year(einsatzmaterial.datumin (2014,2013,2012group by date_format(einsatzmaterial.datum,'%M'order by month(einsatzmaterial.datumasc         
Das Ganze in ein Array gepackt mit Monatsname als key.
Dann durchlaufe ich das Datumarray, schaue ob der key in der sql-Summe existiert. Entweder ja, dann wird der Wert übernommen, ansonsten mit 0 gefüllt.
Somit habe ich immer ein komplettes Array mit allen gewählten Monaten, welches ich auch für andere Statistiken nehmen kann. Und das mache ich nicht mit sql weil ich sonst immer Probleme mit der Gruppierung bekomme und auch noch andere Zahlen brauche.
Mit Zitat antworten
Antwort


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind aus.
[IMG] Code ist aus.
HTML-Code ist aus.

Gehe zu

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Summe berechnen unter Bedingung Doc_McSky MySQLi/PDO/(MySQL) 5 27.03.2012 10:14:26
Berechnung in einfacher Bedingung ( ) ? bitshock PHP Grundlagen 1 20.12.2007 03:34:24
Array(s)-Problem. 2 Arrays mit vergleichen und versch. Werte addieren quasimodus PHP Grundlagen 1 30.05.2006 16:49:11
array_intersect: wie leere arrays ausschließen? gerhard PHP Grundlagen 6 25.08.2004 04:20:08
arrays addieren schrempman PHP für Fortgeschrittene und Experten 2 25.01.2003 20:33:03


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:09:48 Uhr.


Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.


© 2001-2024 E-Mail SELFPHP OHG, info@selfphp.deImpressumKontakt