{"id":448,"date":"2010-12-27T13:35:56","date_gmt":"2010-12-27T12:35:56","guid":{"rendered":"https:\/\/d-mueller.de\/blog\/?p=448"},"modified":"2011-01-04T01:12:43","modified_gmt":"2011-01-04T00:12:43","slug":"die-vernachlassigten-array_walk-array_filter-array_reduce-und-array_map","status":"publish","type":"post","link":"https:\/\/d-mueller.de\/blog\/die-vernachlassigten-array_walk-array_filter-array_reduce-und-array_map\/","title":{"rendered":"Die Vernachl\u00e4ssigten: array_walk, array_filter, array_reduce und array_map"},"content":{"rendered":"<p>Bisher war die Syntax der oben aufgef\u00fchrten Funktionen ziemlich unsexy, da sie mit Callbacks arbeiten und dieser dann als String \u00fcbergeben werden musste. Durch anonyme Funktionen in PHP 5.3 mutet das alles wesentlich &#8222;smoother&#8220; an, sodass ich mir mal die genannten Funktionen genauer angesehen habe und nachfolgend kurz vorstelle.<\/p>\n<h2>array_walk &#8211; Der foreach-Ersatz<\/h2>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\n$arr = array(&quot;audi a6&quot; =&gt; 39500,\r\n\t\t\t &quot;bmw m5&quot; =&gt; 41200,\r\n\t\t\t &quot;mercedes e300&quot; =&gt; 43400);\r\n \r\narray_walk($arr,function($val,$key)\r\n{\r\n\techo $key.&quot; = &quot;.$val.&quot;&lt;br \/&gt;&quot;;\r\n});\r\n\r\n\/*\r\nOutput:\r\naudi a6 = 39500\r\nbmw m5 = 41200\r\nmercedes e300 = 43400\r\n*\/\r\n<\/pre>\n<p>Also \u00e4quivalent zu foreach, das Array selbst bleibt unver\u00e4ndert. Wenn man jetzt das Array per Referenz \u00fcbergibt, kann man das aktuell iterierte Element sogar noch manipulieren.<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\n$arr = array(&quot;audi a6&quot; =&gt; 39500,\r\n\t\t\t &quot;bmw m5&quot; =&gt; 41200,\r\n\t\t\t &quot;mercedes e300&quot; =&gt; 43400);\r\n \r\narray_walk($arr,function(&amp;$val,$key)\r\n{\r\n\t$val = $val * 1.05;\r\n});\r\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\r\nprint_r($arr);\r\n\/*\r\nArray\r\n(\r\n    [audi a6] =&gt; 41475\r\n    [bmw m5] =&gt; 43260\r\n    [mercedes e300] =&gt; 45570\r\n)\r\n*\/\r\n<\/pre>\n<p>Auch das w\u00e4re aber noch mit foreach m\u00f6glich:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\nforeach ($arr as $e =&gt; &amp;$v)\r\n\t$v*=1.05;\r\n<\/pre>\n<\/p>\n<h2>array_filter: Bestimmte Elemente aus Array rauswerfen<\/h2>\n<p>Durch einen boolschen return in der Callback-Funktion lassen sich bestimmte Elemente aus dem Array herausfiltern:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\n$arr = array(&quot;audi a6&quot; =&gt; 39500,\r\n\t\t\t &quot;bmw m5&quot; =&gt; 41200,\r\n\t\t\t &quot;mercedes e300&quot; =&gt; 43400);\r\n\r\n\/\/only cars cheaper than 40000\r\n$res = array_filter($arr,function($val)\r\n{\t\r\n\treturn $val &lt; 40000;\r\n});\r\n\r\nprint_r($res);\r\n\/*\r\nArray\r\n(\r\n    [audi a6] =&gt; 39500\r\n)\r\n*\/\r\n<\/pre>\n<h2>array_reduce: Elemente aus dem Array auf eins reduzieren<\/h2>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\n$a = array(1, 9, 3, 7, 100);\r\n$b = array_reduce($a, function($v, $w)\r\n{\r\n\techo &quot;$v + $w = &quot;.($v + $w).&quot;&lt;br \/&gt;&quot;;\r\n    return $v+$w;\r\n});\r\n\r\nprint &quot;result: &quot;.$b;\r\n\/*\r\nOutput:\r\n+ 1 = 1\r\n1 + 9 = 10\r\n10 + 3 = 13\r\n13 + 7 = 20\r\n20 + 100 = 120\r\nresult: 120\r\n*\/\r\n<\/pre>\n<h2>array_map &#8211; Die Werte von einem\/mehreren Arrays manipulieren<\/h2>\n<p>Erstmal mit einem Array:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\n$a1 = array(1,3,3,7);\r\n\r\n$b = array_map(function($e)\r\n{\r\n    return $e*$e*$e;\r\n}, $a1);\r\n\r\nprint_r($b);\r\n\/*\r\n\r\nArray\r\n(\r\n    [0] =&gt; 1\r\n    [1] =&gt; 27\r\n    [2] =&gt; 27\r\n    [3] =&gt; 343\r\n)\r\n*\/\r\n<\/pre>\n<p>Geht auch mit mehreren Arrays:<\/p>\n<pre data-enlighter-language=\"php\" class=\"EnlighterJSRAW\">\r\n&lt;?php\r\n$a1 = array(1, 2, 3, 4, 5);\r\n$a2 = array(2, 3, 4, 5, 6);\r\n\r\n$b = array_map(function($n1,$n2)\r\n{\r\n    return $n1 * $n2;\r\n}, $a1, $a2);\r\n\r\nprint_r($b);\r\n\/*\r\nArray\r\n(\r\n    [0] =&gt; 2\r\n    [1] =&gt; 6\r\n    [2] =&gt; 12\r\n    [3] =&gt; 20\r\n    [4] =&gt; 30\r\n)\r\n*\/\r\n<\/pre>\n<p>Vielleicht ergibt sich ja mal eine Situation wo man diese zweifellos n\u00fctzlichen Funktionen gewinnbringend anwenden kann.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Bisher war die Syntax der oben aufgef\u00fchrten Funktionen ziemlich unsexy, da sie mit Callbacks arbeiten und dieser dann als String \u00fcbergeben werden musste. Durch anonyme Funktionen in PHP 5.3 mutet das alles wesentlich &#8222;smoother&#8220; an, sodass ich mir mal die &hellip; <a href=\"https:\/\/d-mueller.de\/blog\/die-vernachlassigten-array_walk-array_filter-array_reduce-und-array_map\/\">Weiterlesen <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,3],"tags":[],"class_list":["post-448","post","type-post","status-publish","format-standard","hentry","category-php","category-webdev"],"_links":{"self":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/448","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/comments?post=448"}],"version-history":[{"count":0,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/posts\/448\/revisions"}],"wp:attachment":[{"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/media?parent=448"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/categories?post=448"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/d-mueller.de\/blog\/wp-json\/wp\/v2\/tags?post=448"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}