note 84644 added to function.implode

From: Date: Wed, 23 Jul 2008 13:36:13 +0000
Subject: note 84644 added to function.implode
Groups: php.notes 
Request: Send a blank email to php-notes+get-142608@lists.php.net to get a copy of this message
This is a recursive implode function that can be used on multi-dimensional arrays. The explode function has also obeen included. <?php // Can implode an array of any dimension // Uses a few basic rules for implosion: // 1. Replace all instances of delimeters in strings by '/' followed by delimeter // 2. 2 Delimeters in between keys // 3. 3 Delimeters in between key and value // 4. 4 Delimeters in between key-value pairs function implodeMDA($array, $delimeter, $keyssofar = '') { $output = ''; foreach($array as $key => $value) { if (!is_array($value)) { $value = str_replace($delimeter, '/'.$delimeter, $value); $key = str_replace($delimeter, '/'.$delimeter, $key); if ($keyssofar != '') $key = $key.$delimeter.$delimeter; $pair = $key.$keyssofar.$delimeter.$delimeter.$delimeter.$value; if ($output != '') $output .= $delimeter.$delimeter.$delimeter.$delimeter; $output .= $pair; } else { if ($output != '') $output .= $delimeter.$delimeter.$delimeter.$delimeter; if ($keyssofar != '') $key = $key.$delimeter.$delimeter; $output .= $this->implodeMDA($value, $delimeter, $key.$keyssofar); } } return $output; } // Can explode a string created by corresponding implodeMDA function // Uses a few basic rules for explosion: // 1. Instances of delimeters in strings have been replaced by '/' followed by delimeter // 2. 2 Delimeters in between keys // 3. 3 Delimeters in between key and value // 4. 4 Delimeters in between key-value pairs function explodeMDA($string, $delimeter) { $output = array(); $pair_delimeter = $delimeter.$delimeter.$delimeter.$delimeter; $pairs = explode($pair_delimeter, $string); foreach ($pairs as $pair) { $keyvalue_delimeter = $delimeter.$delimeter.$delimeter; $keyvalue = explode($keyvalue_delimeter, $pair); $key_delimeter = $delimeter.$delimeter; $keys = explode($key_delimeter, $keyvalue[0]); $value = str_replace('/'.$delimeter, $delimeter, $keyvalue[1]); $keys[0] = str_replace('/'.$delimeter, $delimeter, $keys[0]); $pairarray = array($keys[0] => $value); for ($counter = 1; $counter < count($keys); $counter++) { $pairarray = array($keys[$counter] => $pairarray); } $output = array_merge_recursive($output, $pairarray); } return $output; } ?> ---- Server IP: 64.71.164.2 Probable Submitter: 76.216.132.35 ---- Manual Page -- http://www.php.net/manual/en/function.implode.php Edit -- https://master.php.net/note/edit/84644 Del: integrated -- https://master.php.net/note/delete/84644/integrated Del: useless -- https://master.php.net/note/delete/84644/useless Del: bad code -- https://master.php.net/note/delete/84644/bad+code Del: spam -- https://master.php.net/note/delete/84644/spam Del: non-english -- https://master.php.net/note/delete/84644/non-english Del: in docs -- https://master.php.net/note/delete/84644/in+docs Del: other reasons-- https://master.php.net/note/delete/84644 Reject -- https://master.php.net/note/reject/84644 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#142608) next »