php中数组赋值混乱求解
真抓狂了……
大意如下:
$update=['f1'=>121.231,'f2'=>2312.12, 'f3'=>31.1231,'f4'=>213.12,'fv'=>3189.21321];$month=['m1'=>123.1289,'m2'=>123.23198, 'm3'=>23.21,'m4'=>138.21,'mv'=>1231.81]; foreach($update as &$v){ $v=round($v,4); } foreach($month as $k=>$v){ $update[$k]=round($v,4); }
请各位高人先看上面的代码,这个应该没有问题吧?有问题请指出来,我抓狂了,同时也不用看下面那一长大把啦的了……
核心就是将两个数组合并在一起(其他的实现方法先不谈,就只先用这个),并且保留4位小数
如果上面的代码没有问题,请看我下面的调试。
--------------------------DEBUG-------------------------
实际运行中发现fv字段还是保留了其小数位一大堆,总之没有执行round运算,让我开始怀疑人生了
代码中PR(print_r)看数据,发现在经过了update的foreach后都还是正常的,但是在进入month循环后就不正常了
整理后的调试代码见下:
if($debug_flag){ echo('原始数据');BR(); PR($update); } foreach($update as $k=>&$v){ $v=round($v,4); } //实在没有整明白为什么update的最后一个fv不进行四舍五入呢? if($debug_flag){ echo('update foreach 循环后数据');BR(); PR($update); echo('进入month循环');BR(); echo('month原始数据');BR(); PR($month); } foreach($month as $k=>$v){ if($debug_flag){ echo('in month ');BR(); PR($update); PR($k);BR(); } $update[$k]=round($v,4); if($debug_flag){ PR($update); echo('month 循环中数据');BR(); } } if($debug_flag){ echo('month循环后数据');BR(); PR($update); PR($month); die(); }
配套的调试结果见下:
原始数据Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.85900353103)update foreach 循环后数据Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.859)进入month循环month原始数据Array( [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325 [m4] => 602.0825 [mv] => 600.85900353103)in monthArray( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 0)m0Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 0 [m0] => 0)month 循环中数据in monthArray( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 596.4 [m0] => 0)m1Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 596.4 [m0] => 0 [m1] => 596.4)month 循环中数据in monthArray( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 604.5 [m0] => 0 [m1] => 596.4)m2Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 604.5 [m0] => 0 [m1] => 596.4 [m2] => 604.5)month 循环中数据in monthArray( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.3325 [m0] => 0 [m1] => 596.4 [m2] => 604.5)m3Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.3325 [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325)month 循环中数据in monthArray( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 602.0825 [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325)m4Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 602.0825 [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325 [m4] => 602.0825)month 循环中数据in monthArray( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.85900353103 [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325 [m4] => 602.0825)mvArray( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.85900353103 [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325 [m4] => 602.0825 [mv] => 600.859)month 循环中数据month循环后数据Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.85900353103 [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325 [m4] => 602.0825 [mv] => 600.859)Array( [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325 [m4] => 602.0825 [mv] => 600.85900353103)
如果您有耐心看完的话,就会发现进入month循环后数据就已经开始在乱变了……
难道foreach或者是数组的$array[$key]=$value还有什么不为人知的东西?
求援手!
回复讨论(解决方案)
调试到这里顺便就把代码改了
$update=array_merge($update,$month,$year); foreach($update as &$v){ $v=round($v,4); }
这个数据就是正常的了,而且也更简短+明了+没有出错!
但原来的代码是啥地方有问题啊?
$update = array ( 'f1' => 596.4, 'f2' => 604.5, 'f3' => 600.3325, 'f4' => 602.0825, 'fv' => 600.85900353103,);$month = array ( 'm0' => 0, 'm1' => 596.4, 'm2' => 604.5, 'm3' => 600.3325, 'm4' => 602.0825, 'mv' => 600.85900353103,);foreach($update as $k=>&$v){ $v = round($v, 4);}unset($v);foreach($month as $k=>$v){ $update[$k] = round($v, 4);}print_r($update);
Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.859 [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325 [m4] => 602.0825 [mv] => 600.859)
其实这是引用惹的祸,你测试的两组数据正好是相同的,如果你把 $month['mv'] 改成 0,立刻就会发现问题了
$update = array ( 'f1' => 596.4, 'f2' => 604.5, 'f3' => 600.3325, 'f4' => 602.0825, 'fv' => 600.85900353103,);$month = array ( 'm0' => 0, 'm1' => 596.4, 'm2' => 604.5, 'm3' => 600.3325, 'm4' => 602.0825, 'mv' => 600.85900353103,);foreach($update as $k=>&$v){ $v = round($v, 4);}unset($v);foreach($month as $k=>$v){ $update[$k] = round($v, 4);}print_r($update);
Array( [f1] => 596.4 [f2] => 604.5 [f3] => 600.3325 [f4] => 602.0825 [fv] => 600.859 [m0] => 0 [m1] => 596.4 [m2] => 604.5 [m3] => 600.3325 [m4] => 602.0825 [mv] => 600.859)
其实这是引用惹的祸,你测试的两组数据正好是相同的,如果你把 $month['mv'] 改成 0,立刻就会发现问题了
哦,对……忘记引用这回事情了……一般都很少用&,偶尔用用也没有出错……
谢谢!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen



Alipay PHP ...

JWT ist ein offener Standard, der auf JSON basiert und zur sicheren Übertragung von Informationen zwischen Parteien verwendet wird, hauptsächlich für die Identitätsauthentifizierung und den Informationsaustausch. 1. JWT besteht aus drei Teilen: Header, Nutzlast und Signatur. 2. Das Arbeitsprinzip von JWT enthält drei Schritte: Generierung von JWT, Überprüfung von JWT und Parsingnayload. 3. Bei Verwendung von JWT zur Authentifizierung in PHP kann JWT generiert und überprüft werden, und die Funktionen und Berechtigungsinformationen der Benutzer können in die erweiterte Verwendung aufgenommen werden. 4. Häufige Fehler sind Signaturüberprüfungsfehler, Token -Ablauf und übergroße Nutzlast. Zu Debugging -Fähigkeiten gehört die Verwendung von Debugging -Tools und Protokollierung. 5. Leistungsoptimierung und Best Practices umfassen die Verwendung geeigneter Signaturalgorithmen, das Einstellen von Gültigkeitsperioden angemessen.

In Artikel wird die in PHP 5.3 eingeführte LSB -Bindung (LSB) erörtert, die die Laufzeitauflösung der statischen Methode ermöglicht, um eine flexiblere Vererbung zu erfordern. Die praktischen Anwendungen und potenziellen Perfo von LSB

In Artikel werden wichtige Sicherheitsfunktionen in Frameworks erörtert, um vor Schwachstellen zu schützen, einschließlich Eingabevalidierung, Authentifizierung und regelmäßigen Aktualisierungen.

In dem Artikel werden Frameworks hinzugefügt, das sich auf das Verständnis der Architektur, das Identifizieren von Erweiterungspunkten und Best Practices für die Integration und Debuggierung hinzufügen.

Senden von JSON -Daten mithilfe der Curl -Bibliothek von PHP in der PHP -Entwicklung müssen häufig mit externen APIs interagieren. Eine der gängigen Möglichkeiten besteht darin, die Curl Library zu verwenden, um Post � ...

Die Anwendung des soliden Prinzips in der PHP -Entwicklung umfasst: 1. Prinzip der Einzelverantwortung (SRP): Jede Klasse ist nur für eine Funktion verantwortlich. 2. Open and Close Principle (OCP): Änderungen werden eher durch Erweiterung als durch Modifikation erreicht. 3.. Lischs Substitutionsprinzip (LSP): Unterklassen können Basisklassen ersetzen, ohne die Programmgenauigkeit zu beeinträchtigen. 4. Schnittstellen-Isolationsprinzip (ISP): Verwenden Sie feinkörnige Schnittstellen, um Abhängigkeiten und nicht verwendete Methoden zu vermeiden. 5. Abhängigkeitsinversionsprinzip (DIP): Hoch- und niedrige Module beruhen auf der Abstraktion und werden durch Abhängigkeitsinjektion implementiert.

Die Hijacking der Sitzung kann in den folgenden Schritten erreicht werden: 1. Erhalten Sie die Sitzungs -ID, 2. Verwenden Sie die Sitzungs -ID, 3. Halten Sie die Sitzung aktiv. Zu den Methoden zur Verhinderung der Sitzung der Sitzung in PHP gehören: 1. Verwenden Sie die Funktion Session_regenerate_id (), um die Sitzungs -ID zu regenerieren. 2. Store -Sitzungsdaten über die Datenbank, 3. Stellen Sie sicher, dass alle Sitzungsdaten über HTTPS übertragen werden.
