Home > Software engineering >  Array_walk_recursive return true or false
Array_walk_recursive return true or false

Time:03-20

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);

CodePudding user response:

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

CodePudding user response:

Thank you it is my 1st Class... Thank you for your notes you realy help me. That's what I need.

  • Related