PHP Snippets
find_filename
Information
(PHP Version >= 3)Functions used in this snippet: pathinfo, str_replace, file_exists.
Description
string find_filename( string filename )
Creates a unique filename if one already exists (similar to an operating systems naming schema Ex: file.ext already exists so the new file becomes file-1.ext)
Snippet
<?php
function find_filename($filename)
{
$info = pathinfo($filename);
$info['filename'] = str_replace('.' . $info['extension'], '', $filename);
$i = 1;
while(file_exists($filename))
{
$filename = $info['dirname'] . DIRECTORY_SEPARATOR . $info['filename'] . "-$i." . $info['extension'];
$i++;
}
return $filename;
}
?>
Example
find_filename Can be used in the following way:
<?php
<?php
// A file that does not exist
$filename = find_filename('file.txt'); // returns ./file.txt
touch($filename); // create file.txt so it exists now
$filename = find_filename('file.txt'); // returns ./file-1.txt
touch($filename) // create file-1.txt so it exists now
$filename = find_filename('file.txt'); // returns ./file-2.txt
// etc etc
?>
Updated on Feb 21st at 4 pm.
csv2array
Information
(PHP Version >= 3)Functions used in this snippet: file_exists, is_readable, file_get_contents, preg_replace, explode, array_map, unset, range, count, substr_count, reset.
Description
array csv2array( string file, boolean titles )
Takes a csv file and turns it into a multidimensional array. If you leave titles set to true it returns the array with the first line as the associative indexes of the array, if you set titles to false the first line is included in the values and the indexes are integers.
array2csv returns false if the file is not found or not readable.
Snippet
<?php
function csv2array($file, $titles=true)
{
if(!file_exists($file) || !is_readable($file))
{
return false;
}
$file = file_get_contents($file);
$file = preg_replace("/(\r\n|\r|\n\n)/ms", "\n", $file);
$lines = explode("\n", $file);
if($titles)
{
$titles = array_map('trim', explode(',',$lines[0]));
unset($lines[0]);
}
else
{
$titles = range(0, count(explode(',', $lines[0]), 1));
}
$return = array();
foreach($lines as $key => $line)
{
$peices = array_map('trim', explode(',', $line));
for($i=0;$i<count($peices);$i++)
{
$k = $i;
while(substr_count($peices[$k], '"') % 2 === 1)
{
$peices[$k] = $peices[$k] . ',' . $peices[$i + 1];
$i++;
unset($peices[$i]);
}
}
reset($peices);
foreach($peices as $column => $peice)
{
$return[$titles[$column]][$key] = $peice;
}
}
return $return;
}
?>
Example
csv2array Can be used in the following way:
<?php
<?php
/* In the example the csv is as follows:
Name,Title
Scott Roach,"Web Developer, CCi"
Annie Roach,Production Designer
*/
$csv = csv2array('file.csv');
print_r($csv);
/*
Array(
[Name] => Array(
[0] => Scott Roach
[1] => Annie Roach
)
[Title] => Array(
[0] => Web Developer, CCi
[1] => Production Designer
)
)
*/
$csv = csv2array('file.csv', false);
print_r($csv);
/*
Array(
[0] => Array(
[0] => Name
[1] => Scott Roach
[2] => Annie Roach
)
[1] => Array(
[0] => Title
[1] => "Web Developer, CCi"
[2] => Production Designer
)
)
*/
$csv = csv2array('non-existant-file.csv');
print_r($csv);
// False
?>
Updated on Feb 21st at 4 pm.