PHP фильтрация массива за 1 URL - PullRequest
3 голосов
/ 02 апреля 2011

Я создал скрипт, который создает массив URL, вырезанных со страницы, и я хочу отфильтровать массив только для 1 определенного URL. В настоящее время массив выглядит так:

Array
(
    [0] => index.jsp
    [1] => feedback.jsp
    [2] => faq.jsp
    [3] => donate.jsp
    [4] => contact.jsp
    [5] => widgetmaker.jsp
    [11] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
    [12] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
    [13] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
    [14] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
    [15] => http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php
)

И я хочу, чтобы он взял одну из ссылок "http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php". Как мне это сделать?

Ответы [ 3 ]

2 голосов
/ 02 апреля 2011

Если я правильно понимаю, вы хотите получить только полностью определенные (абсолютные) URL:

$filtered = array_filter($urls, function($url) {
    if (strpos($url, 'http://') === 0) return true;
    return false;
});

Если вы хотите, чтобы http и https URL:

$filtered = array_filter($urls, function($url) {
    if (preg_match('#^https?://#', $url)) return true;
    return false;
});

Если вам нужны только точные совпадения:

$filtered = array_filter($urls, function($url) {
    if ($url == 'http://full/url/goes/here') return true;
    return false;
});

Если вы хотите получить только первый, то:

$url = $filtered[0];
0 голосов
/ 03 апреля 2011

Если я вас правильно понимаю, вы либо хотите получить URL-адрес (если он существует в массиве), либо NULL.Этот код PHP будет делать это:

function get_url_if_present($wanted, $array) {
     return array_keys($array, $wanted) ? $wanted : NULL;
}

... где $wanted - это URL, который вы ищете в $array, а возвращаемое значение - строка с найденным URL, если оноприсутствует в массиве, в противном случае NULL.

Вы можете вызвать эту функцию следующим образом:

<?php

function get_url_if_present($wanted, $array) {
     return array_keys($array, $wanted) ? $wanted : NULL;
}

$arr = Array
(
    0 => "index.jsp",
    1 => "feedback.jsp",
    2 => "faq.jsp",
    3 => "donate.jsp",
    4 => "contact.jsp",
    5 => "widgetmaker.jsp",
    11 => "http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php",
    12 => "http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php",
    13 => "http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php",
    14 => "http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php",
    15 => "http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php"
);

$url_as_string = get_url_if_present("http://www.example.com/myaccount/accountactivation?_mska_tok=tON-3yIN1n5TVrFAXT3Q&_tgt_url=http%3A%2F%2Fanothersite.com%2Fxml.php", $arr);
print $url_as_string;

?>
0 голосов
/ 02 апреля 2011

Я думаю, что идеальным было бы усовершенствовать скрипт, чтобы поймать только одну ссылку.Знаете ли вы критерии, по которым должен быть конечный URL?

ИМХО, в идеале, используйте регулярное выражение или, если возможно, найдите конкретную строку с помощью strpos который более эффективен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...