Как найти массив и сохранить его родительский. - PullRequest
0 голосов
/ 04 июля 2018

извините, если моя терминология здесь не так. Использование API для отдыха немного ново для меня.

У меня есть два веб-сайта и функция, которая работает следующим образом:

Веб-сайт A: Делает запрос к веб-сайту B, чтобы узнать, существует ли URL в Resutls Rest API.

//Get the websites URL (websiteA.com
$url = get_site_url();      

//Get the content from websiteB api     
$content = file_get_contents('websiteB.com/wp-json/wp/v2/websites-api');

//Decode the result
$decode = json_decode($content);

//This is whats returned. This is not the complete array but shows
//what Im looking to do
Array
(
[0] => stdClass Object
    (
        [id] => 1040
        [date] => 2018-07-04T09:15:17
        [date_gmt] => 2018-07-04T08:15:17
        [guid] => stdClass Object (
         [rendered] => http://websiteA.com
        )            
        [link] => http://websiteA.com
    )
[1] => stdClass Object
    (
        [id] => 1040
        [date] => 2018-07-04T09:15:17
        [date_gmt] => 2018-07-04T08:15:17
        [guid] => stdClass Object (
         [rendered] => http://websiteC.com
        )            
        [link] => http://websiteC.com
    )
)

Мне нужно выяснить, как искать в этом массиве ссылку, соответствующую $ url, и сохранять родительский объект в виде отдельного массива для вывода частей в разные функции.

Я пробовал следующее:

if (in_array($url, $decode)) {
    echo 'its in there';
} else {
    echo 'its not';
}

Я каждый раз получаю «это не так», хотя я могу видеть это там.

1 Ответ

0 голосов
/ 04 июля 2018

Необходимо пройти через массив $decode, а затем сопоставить со свойствами URL guid->rendered & link. Код должен быть таким:

$found = false;
foreach ($decode as $value) {
    if ($value->guid->rendered == $url || $value->link == $url) {
        $found = true;
        break;
    }
}
if ($found) {
    echo 'its in there';
} else {
    echo 'its not';
}

ОБНОВЛЕНИЕ: Чтобы найти URL существует в данном объекте или нет.

function foundUrl($decode) {
    foreach ($decode as $value) {
        if (is_object($value) || is_array($value)) {
            foundUrl($value);
        } else if (filter_var($value, FILTER_VALIDATE_DOMAIN)) {
            throw new Exception("Found");
        }
    }
}

$found = false;
try {
    foundUrl($decode);
} catch (Exception $e) {
    $found = true;
}

if ($found) {
    echo 'its in there';
} else {
    echo 'its not';
}
...