Beornwulf
Beornwulf

Reputation: 235

Recursively edit multidimensional array

I have a multidimensional array containing some text strings that need modifying. My initial thought was to iterate over it recursively and make the edits, but I've realised that calling the function internally must be breaking the referencing, and I can't see a way around this.

function mysqlifyArray($array)
  {
      global $connection;
      foreach ($array as &$item)
      {
          if (is_string($item))
          {
              echo $item;
              $item = mysqli_real_escape_string($connection, $item);
              echo $item.'<br>';
          }
          elseif (is_array($item))
          {
              $item = mysqlifyArray($item);
          }
      }
      unset($item);
      return $array;
  }

Upvotes: 0

Views: 167

Answers (3)

svvac
svvac

Reputation: 6134

Alternatively, you could use the built-in array_walk_recursive()

function mysqlify(&$value, $index) {
    global $connection;
    return $value = mysqli_real_escape_string($connection, $value);
}

function mysqlify_array(&$array) {
    return array_walk_recursive($array, 'mysqlify');
}

Upvotes: 1

prava
prava

Reputation: 3986

This might help you:

function mysqlifyArray($array)
{
    global $connection;
    foreach ($array as $item)
    {
        if (is_string($item)) {
            echo $item;
            $item = mysqli_real_escape_string($connection, $item);
            echo $item.'<br>';
        } else if (is_array($item)) {
            $item = mysqlifyArray($item);
        }

        unset($item);
    }

    return $array;
}

Note: I am not sure why you used reference for $item variable, instead you can use the reference variable in the method.

Upvotes: 0

fdehanne
fdehanne

Reputation: 1717

Set reference in your function declaration

function mysqlifyArray(&$array)
{
    // ....
}

Upvotes: 1

Related Questions