4
class something{   
    public function add_val( $val ){
    $array = array();
    foreach( $val as $value ) {
        $array[] = static::$post[${$value}];
    }
    return $array;
    }
    pulblic function somethingelse(){
       .... 
       ....
       $optionsArray['value'] = array_map( 'add_val', array_chunk( $drop_val, count( $optionsArray['heading_x'] ) ) );
       ....
       ....
    }
}

how can i call the add_val method within the other using array_map()??

1 Answer 1

12

Use an array that contains the object, and the method name:

$optionsArray['value'] = array_map(array($this, 'add_val'), array_chunk($drop_val, count($optionsArray['heading_x'])));

You do the same for most other functions that take in callbacks as parameters, like array_walk(), call_user_func(), call_user_func_array(), and so on.

How does it work? Well, if you pass an array to the callback parameter, PHP does something similar to this (for array_map()):

if (is_array($callback)) {         // array($this, 'add_val')
    if (is_object($callback[0])) {
        $object = $callback[0];    // The object ($this)
        $method = $callback[1];    // The object method name ('add_val')

        foreach ($array as &$v) {
            // This is how you call a variable object method in PHP
            // You end up doing something like $this->add_val($v);
            $v = $object->$method($v);
        }
    }
}

// ...

return $array;

Here you can see that PHP just loops through your array, calling the method on each value. Nothing complicated to it; again just basic object-oriented code.

This may or may not be how PHP does it internally, but conceptually it's the same.

6
  • how can you pass a variable other than the one from the array? array($this, 'add_val($p)') Jan 22, 2011 at 12:19
  • @Phil: $this->add_val($p), goes back to basic PHP OOP.
    – BoltClock
    Jan 22, 2011 at 12:20
  • im not sure whats goin on here. What does the first peramiter in the array_map do? Jan 22, 2011 at 12:29
  • 1
    @Phil: See if my explanation helps.
    – BoltClock
    Jan 22, 2011 at 12:37
  • thats a cracking explination. Thanks alot Jan 22, 2011 at 13:48

Your Answer

Reminder: Answers generated by Artificial Intelligence tools are not allowed on Stack Overflow. Learn more

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.