note 57919 added to function.implode
| From: | britz_pm at hotmail dot com | Date: | Wed, 19 Oct 2005 08:23:08 +0000 |
| Subject: | note 57919 added to function.implode | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-97210@lists.php.net to get a copy of this message | ||
PLEASE NOTE I HAD TO BREAK SOME LINES CAUSE OF WORDWRAP() WAS NOT HAPPY :(
Well i thought of making some versions of explode/implode
functions with can do any depth of multi-dimensional arrays
with or without keeping the keys
make/change the defaults as you need them
as for error checking i did not add any because would probably
make it take longer to run add em if you please
Code:
<?php
function mul_dim_implode($curarray,$startglue,$endglue,
$withkeys=false,$startkeyglue=null,$endkeyglue=null,$level=0) {
foreach($curarray as $curkey => $curvalue) {
if (is_array($curvalue)) {
$curvalue = mul_dim_implode($curvalue,$startglue,$endglue,
$withkeys,$startkeyglue,$endkeyglue,$level+1);
}
if (!isset($retu)) {
if ($withkeys) {
$retu = $curkey.$startkeyglue.$level.$endkeyglue.$curvalue;
} else {
$retu = $curvalue;
}
} else {
if ($withkeys) {
$retu .= $startglue.$level.$endglue.$curkey.
$startkeyglue.$level.$endkeyglue.$curvalue;
} else {
$retu .= $startglue.$level.$endglue.$curvalue;
}
}
}
return $retu;
}
function mul_dim_explode($curstring,$startglue,$endglue,
$withkeys=false,$startkeyglue=null,$endkeyglue=null,$level=0) {
if (strstr($curstring,$startglue.$level.$endglue)) {
$eacharay = explode($startglue.$level.$endglue,$curstring);
foreach ($eacharay as $curstr) {
if ($withkeys) {
$temp = explode($startkeyglue.$level.$endkeyglue,$curstr);
$retu[$temp[0]] = mul_dim_explode($temp[1],$startglue,$endglue,
$withkeys,$startkeyglue,$endkeyglue,$level+1);
} else {
$retu[] = mul_dim_explode($curstr,$startglue,$endglue,
$withkeys,$startkeyglue,$endkeyglue,$level+1);
}
}
} else {
return $curstring;
}
return $retu;
}
?>
Example:
<?php
$array = array('a' => 'aa', 'b' => 'bb',
'c' => array('d' => 'dd', 'e'
=> 'ee',
'f' => array('g' => 'gg', 'h' =>
'hh')));
$plode = mul_dim_implode($array,"-[","]-");
$keyplode =
mul_dim_implode($array,"-[","]-",true,"={","}=");
echo($plode);
echo("\n<br/>\n");
echo($keyplode);
$unplode = mul_dim_explode($plode,"-[","]-");
$keyunplode =
mul_dim_explode($keyplode,"-[","]-",true,"={","}=");
echo("\n<pre>\n");
echo("Before:\n");
print_r($array);
echo("After:\n");
print_r($unplode);
print_r($keyunplode);
echo("</pre>");
?>
Output:
aa-[0]-bb-[0]-dd-[1]-ee-[1]-gg-[2]-hh
a={0}=aa-[0]-b={0}=bb-[0]-c={0}=d={1}=dd
-[1]-e={1}=ee-[1]-f={1}=g={2}=gg-[2]-h={2}=hh
Before:
Array
(
[a] => aa
[b] => bb
[c] => Array
(
[d] => dd
[e] => ee
[f] => Array
(
[g] => gg
[h] => hh
)
)
)
After:
Array
(
[0] => aa
[1] => bb
[2] => Array
(
[0] => dd
[1] => ee
[2] => Array
(
[0] => gg
[1] => hh
)
)
)
Array
(
[a] => aa
[b] => bb
[c] => Array
(
[d] => dd
[e] => ee
[f] => Array
(
[g] => gg
[h] => hh
)
)
)
Enjoy. ;p
----
Manual Page -- http://www.php.net/manual/en/function.implode.php
Edit -- http://master.php.net/manage/user-notes.php?action=edit+57919
Delete: added to the manual -- http://master.php.net/manage/user-notes.php?action=delete+57919&report=yes&reason=added+to+the+manual
Delete: bad code -- http://master.php.net/manage/user-notes.php?action=delete+57919&report=yes&reason=bad+code
Delete: spam -- http://master.php.net/manage/user-notes.php?action=delete+57919&report=yes&reason=spam
Delete: useless -- http://master.php.net/manage/user-notes.php?action=delete+57919&report=yes&reason=useless
Delete: non-english -- http://master.php.net/manage/user-notes.php?action=delete+57919&report=yes&reason=non-english
Delete: already in docs -- http://master.php.net/manage/user-notes.php?action=delete+57919&report=yes&reason=already+in+docs
Delete: other reasons -- http://master.php.net/manage/user-notes.php?action=delete+57919&report=yes
Reject -- http://master.php.net/manage/user-notes.php?action=reject+57919&report=yes
Search -- http://master.php.net/manage/user-notes.php