csv文件:
1 George 32f755cdbac4a47155639ad6e338709e 21
2 John e473502522cd67ea3c6f58417f086e8d 22
3 Mike c2ed8899990f06d3740adfc49a41ebcb 23
4 Jack 5266e222c45ffa0ec01e82f72a1ba803 24<?php
        // 内容输入到CSV中
function insertDataToCSV($handle, $file, $array) {
if (is_writable($file)  &&  $handle != false) {
foreach ($array as $key => $value) {
fputcsv($handle, split(', ', $value));
}

return true;
}
else
return false;
}

/**
 * 若$id为0表示输出所有内容,否则表示输出id为传递的数字的内容。若id不是数字类型或不存在此id号则出错
 * @param Resource $handle
 * @param int $id
 * @return string|boolean
 */
function selectDataFromCSV($handle, $id) {
if (handle != false) { $csv_contents .= '<table border="1">';
while (($array = fgetcsv($handle)) != false) {
$csv_contents .= '<tr>';
foreach ($array as $i)
$csv_contents .= '<td>' . htmlentities($i) . '</td>';
$csv_contents .= '</tr>';
}
$csv_contents .= '</table>';

if (is_int($id) != false) {
if ($id == 0)
return $csv_contents;
else if ($id > ){

}
else {
return $csv_contents = ();
}
}
else {
echo 'id值必须是正整数值';
return false;
}
}
else
return false;
}




$arr = array(
1 => '1, George, '.md5('3322QQAA').', 21',
2 => '2, John, '.md5('QQAA2233').', 22',
3 => '3, Mike, '.md5('734905461').', 23',
4 => '4, Jack, '.md5('164509437').', 24',
);

$file = 'aa.csv';
$handle = fopen($file, 'r');

/*if (insertDataToCSV($handle, $file, $arr) != false) {
echo '文件可写!';
}
else
echo '文件不可写!';*/

if (($csv = selectDataFromCSV($handle, 3)) != false)
echo $csv;
else
echo '文件不可读!';

fclose($handle);
?>
这是我自己写的模拟MYSQL输出的例子,我想要通过$id(即csv文件的id号)输出相应的行内容?即模拟MYSQL中的select * from 表名 where id = 3;想到这里就想不下去了,所以尚未完整,是不是我的思维出错?应该怎么写呢?phpsqlcsvfilefunction

解决方案 »

  1.   

    写出各个模块的实现函数,比如:select(),updata(),delete(),insert()
    然后正则表达式分解分析sql语句.最后调用相应的函数,
      

  2.   


    我的意思是怎么实现selectDataFromCSV()里面的根据传递的$id参数选择输出相应id值的那行内容?即若传递3,则只输出ID值为3的内容:3 Mike c2ed8899990f06d3740adfc49a41ebcb 23
      

  3.   


    function find($fileName,$id,$all=false){
    $file = fopen($fileName,"r");
    $data = fgetcsv($file);
    if($all){
    return $data;
    }
    $result = array();
    foreach($data AS $key=>$value){if($id == $value[0]){
    $result[] = $value;
    break;
    }
    return $result;
    }
    }没有运行,有些判断就省了,不知道是不是你要的
      

  4.   

    你的也差不多!我也终于完成了:<?php
    function insertDataToCSV($handle, $file, $array) {
    if (is_writable($file)  &&  $handle != false) {
    foreach ($array as $key => $value) {
    fputcsv($handle, split(', ', $value));
    }

    return true;
    }
    else
    return false;
    }

    /**
     * 若$id为0表示输出所有内容,否则表示输出id为传递的数字的内容。若id不是数字类型或不存在此id号则出错
     * @param Resource $handle
     * @param int|float $id
     * @return string|boolean
     */
    function selectDataFromCSV($handle, $id) {
    if (handle !== false) {

    if (is_numeric($id) == false)
    echo '输入的ID值必须为数字类型!';

    $csv_contents .= '<table border="0">';
    while (($array = fgetcsv($handle)) != false) {
    //var_dump($array); // 用于测试
    $csv_contents .= '<tr>';
    foreach ($array as $i) {

    $pattern = '/[1-9]?/';
    if (preg_match_all($pattern, $array[0])) {
    if ($id > $array[0]  ||  $id < 0)
    $stat = 'NoRanges';
    elseif ($id == 0) {
    $csv_contents .= '<td>'.htmlentities($i).'</td>';
    $stat = true;
    }
    elseif ($array[0] == $id) {
    $csv_contents .= '<td>'.$i.'</td>';
    $stat = true;
    }
    }
    else {
    echo '数据库中的ID值有非数字类型!';
    }
    }
    $csv_contents .= '</tr>';
    }

    if ($stat === 'NoRanges')
    echo '不存在此ID号!';

    $csv_contents .= '</table>';



    return $csv_contents;

    }
    else
    return false;
    }




    $arr = array(
    1 => '1, George, '.md5('3322QQAA').', 21',
    2 => '2, John, '.md5('QQAA2233').', 22',
    3 => '3, Mike, '.md5('734905461').', 23',
    4 => '4, Jack, '.md5('164509437').', 24',
    );

    $file = 'aa.csv';
    $handle = fopen($file, 'a+');

    /*if (insertDataToCSV($handle, $file, $arr) != false) {
    echo '文件可写!';
    }
    else
    echo '文件不可写!';*/

    if (($csv = selectDataFromCSV($handle, 3)) != false)
    echo $csv;
    else
    echo '文件不可读!';

    fclose($handle);
    ?>