class DataCache
{
/**
* 数组转换
*
* @param array $array
* @param string $arrayName
* @param array $level
*
* @return string
*/
private function arrayEval($array, $arrayName = '', $level = 0)
{
$space = str_repeat("t", $level);
if (empty($arrayName))
{
$evaluate = "arrayn$space(n";
}
else
{
$evaluate = "${$arrayName} = arrayn$space(n";
}
$space2 = str_repeat("t", $level + 1);
$comma = $space2;
if (!empty($array))
{
foreach ($array as $key => $val)
{
$key = is_string($key) ? ''' . addcslashes($key, ''\') . ''' : $key;
$val = !is_array($val) && (!preg_match('/^-?[1-9]d*$/', $val) || strlen($val) > 12) ? ''' . addcslashes($val, ''\') . ''' : $val;
if (is_array($val))
{
$evaluate .= "$comma$key => " . arrayEval($val, '', $level + 1);
}
else
{
$evaluate .= "$comma$key => $val";
}
$comma = ",n$space2";
}
}
$evaluate .= "n$space)";
// 最后才需要一个“;”
if ($level == 0)
{
$evaluate .= ";";
}
return $evaluate;
}
/**
* 写入缓存
*
* @param string $path
* @param string $arrayName
* @param array $data
*
* @return boolean
*/
public static function writeCache($path, $arrayName, $data)
{
if ($handle = fopen($path, 'w+'))
{
$data = self::arrayEval($data, $arrayName);
$dataConvert = "
flock($handle, LOCK_EX);
$rs = fputs($handle, $dataConvert);
flock($handle, LOCK_UN);
fclose($handle);
if ($rs !== false)
{
return true;
}
}
return false;
}
}
|