多维数组php平面文件



我正在升级我的网站运行方式,我已经在页面中集成了mant-php脚本,但我正在尝试开发完全基于php的网站,例如,而不是加载urls:

url/events/event-1
url/events/event-2

^^^2页独立

我正在尝试加载

url/event?url=event-1

这样我就可以更新1页,但根据加载不同的内容

$_GET['url']

参数。。。。。

到目前为止我所拥有的。。。

我加载url/事件?url=舞蹈

它将自动在目录中搜索文件名"dance.txt"

如果文件不存在,它将转发到主事件页面(url/events)

如果文件确实存在,它会创建一个关于事件的单行字符串。。。。

文件内容如下所示:

Dance::::18-02-2012::::http://{external link}::::Event Information

我开发的用于导入并显示这些数据的脚本运行良好,但我需要一个页面,该页面将在单独的div中加载所有事件……

如果我能弄清楚如何将事件数组数据排列成所有事件的多维数组,那么生成这个页面就足够简单了。。。

对于单个事件,脚本简单地将变量定义为:

$name, $date, $link, $writeup

我已经附上了我如何做到这一点的示例代码。。。

    $dir    = '/server/htdocs/data/';     // path to dir with all event txt files in
$files = scandir($dir);
$fruit = array_shift($files);
$fruit2 = array_shift($files);    // array shifts remove values of '.' and '..'
$line = implode(" ",$files);    // back into string for str_replace
// echo $line;
$oldword = ".txt";
$newword = "";
$newline = str_replace($oldword, $newword, $line);
// echo $newline;

$files = explode(" ", $newline); // array of filenames
if (in_array($url, $files)) {
  $contents = file_get_contents('data/'.$url.'.txt');
} else { header('Location: http://{url}/events'); }
$info = explode('::::', $contents);
// print_r($info);
$name = $info[0];
$date = $info[1];
$link = $info[2];
$writeup = $info[3];

这对单个页面非常有效,但是,我需要一个这样的数组:

$events = array ( array ( Name => event-1,
                          Date => date-1,
                          Link => link-1,
                          Writeup => event-info ),
                  array ( Name => event-2,
                          Date => date-2,
                          Link => link-2,
                          Writeup => event-info ),
                  array ( Name => event-3,
                          Date => date-3,
                          Link => link-3,
                          Writeup => event-info )
                        );

这就是我假设数组的形成方式,但我需要脚本来计算/data/文件夹中有多少文件,然后(我假设)有一个foreach循环,这样对于每个数组(事件)我都可以回显:

<div id="content2"> 
                    <div class="post">
<center><h2><u>'.$name.' ('.$date.')</u></h2></center>
                       <p class="postmeta"></p>
                        <div class="entry">
<CENTER><img src="events/posters/'.$name.'.jpg" height="400" width="500"></center>
<p><p>
<p>'.$writeup.'</p>
<p><a href="'.$link.'" " target="_blank">'.$name.' Online</a></p>

 </div>
                    </div><!-- post --> 
                </div><!-- content2 -->

我知道这似乎是一种复杂的处理方式,但通过这种方式,我的网站将通过txt文件中的数据进行100%编辑,因为现在我必须克隆现有页面,然后为新事件重新写入其中的所有内容!

foreach($files as $key => $value) {
$array[] = array(explode('::::',(file_get_contents('data/'.$files[$key].'.txt'))));
}
print_r($array);

给我:

Array
(
    [0] => Array
        (
            [0] => Array
                (
                    [0] => 5th-Element
                    [1] => 11-02-2012
                    [2] => http://www.5thelementrocks.co.uk/
                    [3] => 5th Element are a 5 piece classic rock covers band gigging in venues across the North-West and Wales. Our set lists include tracks by all the greats, including AC/DC, The Cult, Muse, Bon Jovi, Nirvana, Whitesnake, The Darkness, Ozzy Osbourne, and many more. </p><p>We are a high quality, high energy, experienced classic rock band who work hard and play hard to get the audience going and to make sure each gig is a pro performance. Whether were playing for a crowd of one or one thousand, we always give 110% to keep you shakin all night long!
                )
        )
    [1] => Array
        (
            [0] => Array
                (
                    [0] => BBGM
                    [1] => 25-02-2012
                    [2] => http://nwb.co/bbgm
                    [3] => BBGM are four 40-50 something musicians (twin guitars, vocals, bass & drums) who were all in various bands years ago, playing and touring all over the North of England & Europe in the 1980s including working and recording with the now legendary producer Gil Norton.</p><p>In 2007 they got together to form BBGM to gig again. Now an established band on the Northwest circuit we are currently gigging throughout the North West and North Wales playing classic rock covers from the 70's 80's and 90's throwing in one or two original tracks penned over the years.
                )
        )
    [2] => Array
        (
            [0] => Array
                (
                    [0] => Plastic-Sarcasm
                    [1] => 18-02-2012
                    [2] => http://www.facebook.com/pages/PLASTIC-SARCASM/284242054943613?sk=info
                    [3] => Four lads who are still burning. Having the desire to kick ass every now and then through the music they create.</p><p>Originally formed in 1978 by current member Phil Narayan together with Paul Wynne, Phil Tonge and Baz Yates, the Band played in the Punk Rock scene era in and around Bolton. Having not played guitar (but played drums for a couple of years from 1986 1989) on stage for over thirty years, Phil Narayan couldn't resist a late urge to enjoy the feeling of playing live on stage once again. Regularly practising with PLUM ( joined the band as singer in 1980) who, now plays Bass guitar and sings, the pair set about making the dream happen once again. They recruited Gordon Connolly for an extra guitar who has been playing throughout his life with various bands, in September 2010. Finally, drummer Gag Martin joined up in reply to an advert at the local rehearsal studios in May 2011.</p><p>"Having had 9 practice / Jammin sessions the band played their first gig in Little Lever on 17th December 2011 where all the old Punk songs were revived. The gig was a screaming success and it is the intention to do more gigs in 2012 when the band will gradually introduce their own numbers more and more as gigs go by."
                )
        )
    [3] => Array
        (
            [0] => Array
                (
                    [0] => Whipcord
                    [1] => 17-02-2012
                    [2] => http://www.facebook.com/whipcord
                    [3] => Doobie Brothers in Bad Brains t-shirts, whistling The Hollies on the way to a Pentagram gig, reading The Wire...it's rock n roll!!</p><p>Whipcord are a stentorian rock n roll power trio from Salford, Manchester UK. Within the noise is a classicist rock feel, drowning in a tar pool of punk rock fury. Being described as the bastard child of Motorhead and Foo Fighters. and that of polished anarchy, not unlike The Whos live shows.
                )
        )
)

啊哈,快完了。

ps我想foreach按每个txt文件中的日期列出,它目前按文件名的字母顺序列出。。。

借用了一点Jribeiro的代码,将文件实际读取到二维数组中。

$items = array();
if ($handle = opendir($dir)) {
    while (false !== ($file = readdir($handle))) {
        $fp = fopen("$file","r");
        while($line = fgets($fp)){
            $parts = explode("::::",$line);
            $newArr["Name"] = $parts[0];
            $newArr["Date"] = $parts[1];
            $newArr["Link"] = $parts[2];
            $newArr["Writeup"] = $parts[3];
            $items[] = $newArr;  // add newArr to items
        }
        fclose($fp);
    }
    closedir($handle);
}
print_r($items);

然后,循环通过$items阵列:

foreach($items as $item){
    $name = $item["Name"];
    echo "Name is $name<br>";
    // etc
}

尽管如此,我还是需要通知您考虑使用MySQL来实现这一点,因为它比使用纯文本文件更容易、更安全、更强大。

如果你想要dir中的文件数量,你可以试试这个:

function fileCounter($dir){
    $counter = 0;
    if ($handle = opendir($dir)) {
      //echo "Directory handle: $handlen";
      //echo "Files:n";
      /* This is the correct way to loop over the directory. */
      while (false !== ($file = readdir($handle))) {
          //echo "<BR>".$counter." - $file";
          $counter++;
      }
      closedir($handle);
    }
    $counter -= 1; // in order to exclude '.' and '..', as well as start the counter on 1
    return $counter;
}

实际上我不太确定我是否正确理解了你的问题。但最后,您想将嵌套数组$events存储在平面文件中,并将其读回数组吗?我建议使用serialize来完成这项工作,那么它就很简单了:

$events = array ( array ( Name => event-1,
                          Date => date-1,
                          Link => link-1,
                          Writeup => event-info ),
                  array ( Name => event-2,
                          Date => date-2,
                          Link => link-2,
                          Writeup => event-info ),
                  array ( Name => event-3,
                          Date => date-3,
                          Link => link-3,
                          Writeup => event-info )
                        );
file_put_contents("/foo/bar",serialize($events)); // BAM, it's in the file :)
//reading it back is equally simple
$events2 = unserialize(file_get_contents("/foo/bar"));

最新更新