Цикл массива через второй массив - PullRequest
0 голосов
/ 26 июля 2010

Глядя в цикле по массиву URL-адресов и вставляя каждое ключевое слово из второго массива в каждый URL-адрес, но не могу разобраться с пониманием массивов. Например:

$key = array("Keyword+1", "Keyword+2", "Keyword+3"),
$url =array("google.co.uk/#hl=en&q=", "bing.com/search?q=","uk.search.yahoo.com/search?vc=&p="),

Я бы хотел, чтобы вышеперечисленное вывело:

google.co.uk / # = гл ен & д = Ключевое слово + 1
google.co.uk/#hl=en&q=Keyword+2
google.co.uk/#hl=en&q=Keyword+3
bing.com/search?q=Keyword+1
bing.com/search?q=Keyword+2
bing.com/search?q=Keyword+3
uk.search.yahoo.com/search?vc=&p=Keyword+1
uk.search.yahoo.com/search?vc=&p=Keyword+2
uk.search.yahoo.com/search?vc=&p=Keyword+3

Есть ли эффективный способ добиться этого? :)

Ответы [ 4 ]

2 голосов
/ 26 июля 2010
foreach($url as $currenturl)
{
    foreach($key as $currentkey)
    {
        echo $currenturl . $currentkey . '\n';
    }
}

попробуйте

0 голосов
/ 27 июля 2010

То, что вы описываете, является обобщением внешнего продукта.

Было бы более интересно определить функцию более высокого порядка для этого:

/**
 * A generalization of the  outer product, forming all the possible
 * combinations of the elements of the two arrays and feeding them
 * to $f.
 * The keys are disregarded
 **/
function array_outer($f, array $array1, array $array2) {
    $res = array();
    foreach ($array1 as $e1) {
        $cur = array();
        foreach ($array2 as $e2) {
            $cur[] = $f($e1, $e2);
        }
        $res[] = $cur;
    }
    return $res;
}

$f = function ($a,$b) { return $a.$b; };
print_r(array_outer($f, array("a","b","c"), array("1", "2", "3")));

дает:

Array
(
    [0] => Array
        (
            [0] => a1
            [1] => a2
            [2] => a3
        )

    [1] => Array
        (
            [0] => b1
            [1] => b2
            [2] => b3
        )

    [2] => Array
        (
            [0] => c1
            [1] => c2
            [2] => c3
        )

)

См. Mathematica's Outer.

0 голосов
/ 27 июля 2010

Вот как вы можете это сделать:

$keys = array("Keyword+1", "Keyword+2", "Keyword+3");
$urls =array("google.co.uk/#hl=en&q=", "bing.com/search?q=","uk.search.yahoo.com/search?vc=&p=");

$my_array = array();

foreach($urls as $url)
{
    foreach($keys as $key)
    {
        $my_array[] = $url . $key;
    }
}

print_r($my_array);

Результат:

Array
(
    [0] => google.co.uk/#hl=en&q=Keyword+1
    [1] => google.co.uk/#hl=en&q=Keyword+2
    [2] => google.co.uk/#hl=en&q=Keyword+3
    [3] => bing.com/search?q=Keyword+1
    [4] => bing.com/search?q=Keyword+2
    [5] => bing.com/search?q=Keyword+3
    [6] => uk.search.yahoo.com/search?vc=&p=Keyword+1
    [7] => uk.search.yahoo.com/search?vc=&p=Keyword+2
    [8] => uk.search.yahoo.com/search?vc=&p=Keyword+3
)
0 голосов
/ 26 июля 2010

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

foreach ($url as $u)
{
    foreach ($key as $k)
    {
        echo $u.$k."\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...