user3325376
user3325376

Reputation: 198

return inside loop only returns one value

I want to translate each words in array:

$myarray = array("hi","bro");

So I wrote a translate function like this:

function translate($word) {    

    foreach ( $word as $key_translate ) {
        $array = array();

        $sql = mysql_query("SELECT * FROM `translate` WHERE name = '".$key_translate."'  ");
        if ( mysql_num_rows($sql) == 1 ) {
          $row = mysql_fetch_array($sql);
          $name = $row['fa_name'];
          return $name;
        //retuen array($name);
        }
        else {
          return $key_translate;
        //return array($key_translate);
        }
    }       
}

And using this to show translated array:

print_r (translate($myarray));

But it's not returning array, it's just showing first key as string.

How can I return array in function?

Upvotes: 0

Views: 131

Answers (2)

Manoj Yadav
Manoj Yadav

Reputation: 6612

Try this:

function translate($word) {
    foreach ($word as $key => $translate) {
        $sql = mysql_query("SELECT * FROM `translate` WHERE name = '" . $translate . "'  ");
        if (mysql_num_rows($sql) == 1) {
            $row = mysql_fetch_array($sql);
            $word[$key] = $row['fa_name'];
        }
    }
    return $word;
}

Upvotes: 0

Barmar
Barmar

Reputation: 780724

Don't return inside the loop, that exits the whole function immediately and just returns that one element. Accumulate the results in an array, and return that.

function translate($word) {

    $result = array();
    foreach ( $word as $key_translate ) {

        $sql = mysql_query("SELECT fa_name FROM `translate` WHERE name = '".$key_translate."'  ");
        if ( mysql_num_rows($sql) == 1 ) {
            $row = mysql_fetch_array($sql);
            $result[] = $row['fa_name'];
        }
        else {
            $result[] = $key_translate;

        }
    }
    return $result;

}

Also, there's no reason to use SELECT * if you're only interested in fa_name.

Upvotes: 2

Related Questions