2013-09-03 2 views
0

У меня есть следующий код:Найти в объекте Массивы значение

function searchObject($obj, $field, $value) { 
    foreach ($obj as $item){ # gets to products 
     foreach ($item as $child) { #gets to products, products is an array of products 
      foreach ($child as $grandchild){ #gets to products array 
       if (isset($grandchild->$field) && $grandchild->$field == $value) { 
        return $grandchild; 
       } 
      } 
     } 
    } 
    return "Not Found"; 
} 

Вот как это называется:

$freetrialobj = searchObject($arr, "pid", 15); 

Но это не работает, сообщая об «недопустимый аргумент». Вот print_r объекта массивов:

Array: stdClass Object 
(
[result] => success 
[clientid] => 706 
[serviceid] => 
[pid] => 
[domain] => 
[totalresults] => 1 
[startnumber] => 0 
[numreturned] => 1 
[products] => stdClass Object 
    (
     [product] => Array 
      (
       [0] => stdClass Object 
        (
         [id] => 1014 
         [clientid] => 706 
         [orderid] => 902 
         [pid] => 15 
         [regdate] => 2013-09-03 
         [name] => 
         [groupname] => 
         [domain] => 
         [dedicatedip] => 
         [serverid] => 0 
         [servername] => 
         [serverip] => 
         [serverhostname] => 
         [firstpaymentamount] => 0.00 
         [recurringamount] => 0.00 
         [paymentmethod] => authorize 
         [paymentmethodname] => Authorize.net 
         [billingcycle] => Free Account 
         [nextduedate] => 0000-00-00 
         [status] => Pending 
         [username] => 
         [password] => 
         [subscriptionid] => 
         [promoid] => 0 
         [overideautosuspend] => 
         [overidesuspenduntil] => 0000-00-00 
         [ns1] => 
         [ns2] => 
         [assignedips] => 
         [notes] => 
         [diskusage] => 0 
         [disklimit] => 0 
         [bwusage] => 0 
         [bwlimit] => 0 
         [lastupdate] => 0000-00-00 00:00:00 
         [customfields] => stdClass Object 

Что такое лучший способ проверить, вложенный объект, как это для значения?

+0

дайте нам объявление массива, чтобы мы могли его протестировать –

ответ

1

Существует, вероятно, функция PHP, которая делает это, но вместо того, скотина, заставляя его, как ваши попытки функции, позволяет применить некоторое рекурсивное мышление:

function searchObject($obj, $field, $value) { 
    if (is_array($obj)) { //Is this object even array? 
    if(array_key_exists($field, $obj)) { //Check to see if the object exists 
     return $obj->$field; //If so, return it 
    } else { 
     foreach ($obj as $key => $val) {//Search all sub-objects 
     $result = searchObject($val, $field, $value);//Make a recursive call 
     if ($result !== false) {//If not false, we found it! 
      return $result; //return the result 
     } 
     } 
     return false;//Otherwise we didn't find it, return false 
    } 
    } else { 
    return false;//This isn't an array, so it can't possibly have the field. 
    } 
} 

Это должно быть в состоянии (сделать depth- сначала) найдите объект любой глубины для своего поля и верните его или false, если его там нет. Обратите внимание, что он вернет первое такое поле, которое он найдет; если имеется несколько совпадающих полей, вы будете пропускать что-либо за пределами первого.

Смежные вопросы