{"id":29035,"date":"2018-11-27T13:23:14","date_gmt":"2018-11-27T11:23:14","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=29035"},"modified":"2018-11-27T13:23:14","modified_gmt":"2018-11-27T11:23:14","slug":"avoid-complex-arrays-in-php","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2018\/11\/27\/avoid-complex-arrays-in-php\/","title":{"rendered":"Avoid complex arrays in PHP"},"content":{"rendered":"<!-- google_ad_section_start -->\n<p>Now that PHP 7+ sorted out a whole bunch of problems with type-hinting of parameters, return values, variables and properties, we turn our attention to somewhat deeper issues.<\/p>\n<p>Array is a native citizen in PHP.\u00a0 Arrays are very convenient and are widely used.\u00a0 However, if you stop and think about the times where you had to figure out somebody else&#8217;s code, I&#8217;m pretty sure complex arrays will come to mind at some point.<\/p>\n<p>I&#8217;ve recently came across two completely independent blog posts which talk exactly about this particular area of problems:<\/p>\n<ul>\n<li><a href=\"https:\/\/nehalist.io\/better-array-parameter-handling-in-php\/\">Better array parameter handling in PHP<\/a><\/li>\n<li><a href=\"https:\/\/blog.fox21.at\/2018\/11\/21\/avoid-dynamic-data-structures-in-php.html\">Avoid Dynamic Data structures in PHP<\/a><\/li>\n<\/ul>\n<p>Both are explaining the issues very well and make valid points.\u00a0 As far as solutions and better ways go, apart from the approaches mentioned in these blog posts, I also remembered <a href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/11\/12\/spatie-data-transfer-object-data-transfer-objects-with-batteries-included\/\">a recent blog post<\/a> from which I linked to the <a href=\"https:\/\/github.com\/spatie\/data-transfer-object\">data transfer object library<\/a>, that solves exactly that.<\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>Now that PHP 7+ sorted out a whole bunch of problems with type-hinting of parameters, return values, variables and properties, we turn our attention to somewhat deeper issues. Array is a native citizen in PHP.\u00a0 Arrays are very convenient and are widely used.\u00a0 However, if you stop and think about the times where you had &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2018\/11\/27\/avoid-complex-arrays-in-php\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Avoid complex arrays in PHP<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Avoid complex arrays in PHP #WebDev #PHP #BestPractices #DataStructures #OOP","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[3069,3570,3083,38,1330],"keyring_services":[],"class_list":["post-29035","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-best-practices","tag-data-structures","tag-oop","tag-php","tag-web-development"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":28552,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/05\/07\/working-with-php-arrays-in-the-right-way\/","url_meta":{"origin":29035,"position":0},"title":"Working With PHP Arrays in the Right Way","author":"Leonid Mamchenkov","date":"May 7, 2018","format":false,"excerpt":"\"Working With PHP Arrays in the Right Way\" is a collection of tips and tricks on the array functions in PHP.\u00a0 PHP is weird, to say the least, when it comes to arrays, compared to many other programming languages, so articles like that are useful for pointers to better ways\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":18605,"url":"https:\/\/mamchenkov.net\/wordpress\/2013\/09\/13\/beautifying-phps-json_encode-output\/","url_meta":{"origin":29035,"position":1},"title":"Beautifying PHP&#8217;s json_encode() output","author":"Leonid Mamchenkov","date":"September 13, 2013","format":false,"excerpt":"I've been working a bit more with PHP and JSON recently and one of the things that annoyed me quite a bit was the single line output of the json_encode() function. \u00a0Here is an example: Poorly readable result (imagine having larger, more complex data structures like nested arrays): Apparently, since\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27612,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/05\/23\/php-moving-from-array-to-class\/","url_meta":{"origin":29035,"position":2},"title":"PHP : Moving from array to class","author":"Leonid Mamchenkov","date":"May 23, 2017","format":false,"excerpt":"\"Moving from array to class\" is yet another thought-provoking take on the difference between arrays and classes in the modern versions of PHP. \u00a0The benefits of moving from arrays to classes seem to be not only in the code readability and maintainability, but quite clearly in performance and resource utilization\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":28970,"url":"https:\/\/mamchenkov.net\/wordpress\/2018\/11\/12\/spatie-data-transfer-object-data-transfer-objects-with-batteries-included\/","url_meta":{"origin":29035,"position":3},"title":"spatie\/data-transfer-object &#8211; Data transfer objects with batteries included","author":"Leonid Mamchenkov","date":"November 12, 2018","format":false,"excerpt":"spatie\/data-transfer-object library provides very easy to use data-transfer objects for PHP.\u00a0 If you code is relying a lot on arrays, you'll appreciate this different approach.\u00a0 And the more complex your arrays are, the more benefit you'll get out of it.","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27463,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/03\/27\/creating-strictly-typed-arrays-collections-php\/","url_meta":{"origin":29035,"position":4},"title":"Creating Strictly Typed Arrays and Collections in PHP","author":"Leonid Mamchenkov","date":"March 27, 2017","format":false,"excerpt":"This SitePoint PHP blog post\u00a0(read at Planet PHP if the site is unavailable) brings to light a very useful feature available since PHP 5.6 - ellipses in functional arguments, which allows to define a variable number of arguments to a function. I've seen the mentions of ellipses a few times\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":17302,"url":"https:\/\/mamchenkov.net\/wordpress\/2012\/12\/11\/spl-standard-php-library\/","url_meta":{"origin":29035,"position":5},"title":"SPL &#8211; Standard PHP Library","author":"Leonid Mamchenkov","date":"December 11, 2012","format":false,"excerpt":"I've been looking at SPL for some time now. \u00a0On one hand, it's a new addition to PHP core (since version 5.3), so I know how to work without it. \u00a0On the other hand, it provides standardized solutions for common problems, and that should be enough reason to start using\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/29035","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=29035"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/29035\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=29035"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=29035"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=29035"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=29035"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}