'Array_walk_recursive return true or false

I have some script for long random xml and I need to find value when I know key. I tried to use array_walk_recursive - but when I used it - I took value only when I used echo. When I used return I took only true or false... I need to take back a variables for next processing. Can you help me please?

    class ClassName{
   private $array;
   private $key  ;
   public $value;
   public $val;

    function getKey($key) {
        $this->key = $key;
        return $key;
    }

   function getFind($value, $key)
    {
        static $i = 0;

        if ($key === ($this->key)) {
            $value = $value[$i];
            $i++;
            return $value;
           

        }

    }
}


$xml_simple = simplexml_load_file('./logs/xml_in1.xml');
$json = json_encode($xml_simple);
$array = json_decode($json, TRUE);

$obj = new ClassName();
$obj_key = 'pracovnik';
$obj->getKey($obj_key);


print_r(array_walk_recursive($array,[$obj,"getFind"]));
print_r( $obj->value);



Solution 1:[1]

The return value of array_walk_recursive is:

Returns true on success or false on failure.

What you might so as an idea is to use an array where you can add values to when this if clause is true:

if ($key === $this->key) {

Then you could create another method to get the result:

For example

class ClassName
{
    private $key;
    private $result = [];

    function setKey($key) {
        $this->key = $key;
    }

    function find($value, $key) {
        if ($key === $this->key) {
            $this->result[$key][] = $value;
        }
    }

    function getResult(){
        return $this->result;
    }
}

$xml_simple = simplexml_load_file('./logs/xml_in1.xml');
$json = json_encode($xml_simple);
$array = json_decode($json, TRUE);

$obj = new ClassName();
$obj->setKey('pracovnik');

array_walk_recursive($array, [$obj, "find"]);
print_r($obj->getResult());

A few notes about the code that you tried:

  • You have a line after the return statement return $value; that will never be executed
  • You have declared but not using public $val; and private $array;
  • I think function getKey is better named setKey as you are only setting the key

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 The fourth bird