Jump to content

Generate array list from file


eevan79

Recommended Posts

Here is how I get categories for article listing. Article can be written in several categories at once. So I have this code:

 

 

$category = '1,5,23,46'; //Category IDs

$get_cats = explode("," , $category); 
$cats = "";

for ($i = 0; $i<count($get_cats); $i++ ) {
$cat  = trim($get_cats[$i]);
$catSlug = get_value_of($cat, "inc/cat_ids.php");
$catName = str_replace("-"," ",$catSlug);
$cats .= "<a href=\"index.php?category=$catSlug\">".strtoupper($catName)."</a>, ";
}
$cats = substr($cats,0,-2);

 

 

As you can see there's get_value_of function that is used to read the category from the file. File is cat_ids.php and looks like this:

1='category-name-1';

2='category-name-2';

3='category name-3';

4='category-name-4';

5='category-name-5';

etc.

 

 

I want to improve this in order not to read the file at each step ("for" loop).

Means, one can load the file and then generate a list of (links) category compared to the numbers (Ids).

So if $category is "1,3,4" I want to get list like this (by reading cat_ids.php):

category-name-1, category name-3, category-name-4

 

With current function I read value for every ID from file in every step. So if article have 10 or more categories script load file 10 or more times. Looking for a solution to do this from a reading file only once.

 

 

Thanks.

Link to comment
Share on other sites

I'm working on a freshly installed machine and don't have a test server set up yet, so none of this is tested (especially the regex = I think the single quote marks [all three] may need to be escaped with a forward-slash before each one):

//Read master category list into array
$categoryFile = "path/to/file/filename.txt";
$categoryList = array();
foreach(file($categoryFile) as $line)
{
    preg_match("#(\d+)='([^']*)'#", $line, $match);
    $categoryList[$match[1]] = str_replace("-", " ", $match[2]);
}

//Process the current categories
$categories = '1,5,23,46'; //Category IDs
//Convert to array AND apply trim
$categoryIDsAry = array_map('trim', explode("," , $categories));

//Create the HTML ouput
$catsHTMLAry = array();
foreach ($categoryIDsAry as $catID)
{
    $catSlug = $categoryList[$catID];
    $catName = str_replace("-", " ", $catSlug);
    $catsHTMLAry[] = "<a href=\"index.php?category=$catSlug\">".strtoupper($catName)."</a>, ";
}
$catsHTMLStr = implode(', ' $catsAry);

Link to comment
Share on other sites

Thanks. With few corrections it's working fine.

 

 

 

$categoryFile = dirname($_SERVER['SCRIPT_FILENAME'])."/inc/cat_ids.php";
$categoryList = array();


foreach( file($categoryFile) as $line)
{
    preg_match("#(\d+)='([^']*)'#", $line, $match);
    $categoryList[$match[1]] = str_replace("-", " ", $match[2]);
}


//$categories = $category; 1,5,23,46
$categoryIDsAry = array_map('trim', explode("," , $category));


$catsHTMLAry = array();
foreach ($categoryIDsAry as $catID)
{
    $catSlug = $categoryList[$catID];
    $catName = str_replace("-", " ", $catSlug);
    $catsHTMLAry[] = "<a href=\"index.php?category=$catSlug\">".strtoupper($catName)."</a> ";
}
$cats = implode(', ', $catsHTMLAry);

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.