שלום לכם,
לא פעם ולא פעמיים נתקלתי במקרים (שלי או של אחרים) שהיה צורך להשתמש במערך רב מימדי, אך היה צורך גם לאחסן את כל הנתונים בDATABASE.
עכשיו ראיתי מישהו באיזה פורום שצריך משהו כזה, אז החלטתי לכתוב פשוט דרך לעשות את זה.
מה שעשיתי זה לקחתי את המערך והפכתי אותו לSTRING, שמופרד על ידי תווים שלא כל כך בשימוש (התווים הראשונים בASCII TABLE).
יצא קצת מורכב גם לי:
PHP קוד:
function to_dbdata($var,$varname='dbdata',$level=1)
{
$new_string = $varname.chr(1);
if(is_array($var))
{
$new_string .= chr($level+2);
foreach($var as $key=>$value)
{
$new_string .= to_dbdata($value,$key,$level+1);
}
$new_string .= chr($level+3);
}
elseif(is_string($var))
$new_string .= $var;
$new_string .= chr(2);
return $new_string;
}
function from_dbdata($dbdata,$level=1)
{
preg_match_all('#([a-zA-Z0-9_]+)'.chr(1).chr($level+2).'(.*)'.chr($level+3).chr(2).'#Us',$dbdata,$match1);
for($i=0;$i<count($match1[1]);$i++)
{
$dbdata = str_replace($match1[0][$i],'',$dbdata);
$new_data[$match1[1][$i]] = from_dbdata($match1[2][$i],$level+1);
}
preg_match_all('#([a-zA-Z0-9_]+)'.chr(1).chr($level+2).'{0}(.*)'.chr($level+3).'{0}'.chr(2).'#Us',$dbdata,$match2);
for($i=0;$i<count($match2[1]);$i++)
{
$new_data[$match2[1][$i]] = $match2[2][$i];
}
return $new_data;
}
דוגמה לשימוש:
קוד:
PHP קוד:
$cool_array = array("hey"=>"there",array("yes","no"=>"sir"),"what is up");
print_r(from_dbdata(to_dbdata($cool_array,'cool_array')));
פלט:
PHP קוד:
Array
(
[cool_array] => Array
(
[0] => Array
(
[0] => yes
[no] => sir
)
[hey] => there
[1] => what is up
)
)
אשמח לשמוע מה דעתכם על הפונקצייה המכוערת שלי.