luftikus143
luftikus143

Reputation: 1285

PHP: Cannot use [] for reading - but it's not [] but [$counter]

in general I think I understand what the error message means. But in my case, it's a riddle I didn't succeed in solving...

    $keywords_all = array();
    $count = 0;

    for ($z = 0; $z < $num_results; $z++)
    {
        $keywords_array = explode(",", $row['free_keywords']);

        for ($i = 0; $i < count($keywords_array); $i++)
        {
            if (in_array(strtolower(trim($keywords_array[$i])), $keywords_all))
            {
                $count++;
            }
            else
            {
                echo "<br />".$keywords_array[$i];
                $keywords_all[$count] = $keywords_array[$i];
            }
        }

        $row = pg_fetch_array($result);
    }

So, what's wrong with that one? The error message pops up in the line

    $keywords_all[$count] = $keywords_array[$i];

I have no clue, seems to be alright to me. But guess, it's again a tiny, tiny thing I've neglected... Thanks for any hints!

Upvotes: 1

Views: 1255

Answers (2)

Aadrinmusic
Aadrinmusic

Reputation: 124

I was not able to reproduce your error message. I did find a bug in your code though (I am assuming that you are putting all your keywords in the $keywords_all array without any duplicates). So you should not increment $count inside your IF but instead update the $keywords_all count. See below:

if (in_array(strtolower(trim($keywords_array[$i])), $keywords_all)) {
    $count = count($keywords_all);
} else {
    echo "<br />".$keywords_array[$i];
    $keywords_all[$count] = $keywords_array[$i];
    $count++;
}

You will increment $count after storing a value to your $keywords_all array.

Upvotes: 1

Nikita
Nikita

Reputation: 4686

    $keywords_all = array();
    $count = 0; // what for you neet this var ?

    $myRow = 'keyW1,keyW2,keyW3,keyW2';

//    for ($z = 0; $z < $num_results; $z++) // there is no variable $num_results at your code so I've replaced it with constant
    for ($z = 0; $z < 1; $z++)
    {
//        $keywords_array = explode(",", $row['free_keywords']); 
        $keywords_array = explode(",", $myRow);

//        for ($i = 0; $i < count($keywords_array); $i++)
        foreach ($keywords_array as $keyword)
        {

            $keyword = strtolower( trim( $keyword ) ); // some syntax sugar would be nice

            if ( !in_array( $keyword, $keywords_all) )
            {
                echo "<br />".$keyword;

                $keywords_all[] = $keyword;

            }
        }

//        $row = pg_fetch_array($result);
    }

    var_dump($keywords_all);

This code would be better for you i think, but if you just want to get rid of duplicated records

array_uniq( array("1", "1", "2", "1") ) 

would be better solution for you.

Upvotes: 0

Related Questions