PHP - 从另一个数组中的值填充数组中的变量

时间:2012-02-14 15:29:44

标签: php arrays associative-array

嗯怎么解释? ;)我想我只是让蹩脚的编码谈到:)

给定一系列URL'模板(为了便于使用而截断)

$default = array(
    "/$market",
    "/$market/catalog/productsaz/",
    "/$market/catalog/products/$artid",
);

和多维市场阵列(为了便于使用而截断)

$markets = array(
array(market => "/gb/en", storeid => "storeId=1", langid =>"langId=-1", storenumber=> "001", prodid=> "12345", artid=> "4525412" ),
array(market => "/at/de", storeid => "storeId=2", langid =>"langId=-81", storenumber=> "003", prodid=> "12356", artid=> "8456125" ),
array(market => "/be/nl", storeid => "storeId=19", langid =>"langId=-13", storenumber=> "008", prodid=> "12367", artid=> "4578542" )
);

如何将两者混合在一起,以便为每个市场获得一系列已解析的URL。

/gb/en
/gb/en/catalog/productsaz/
/gb/en/catalog/products/4525412
/at/de
/at/de/catalog/productsaz/
/at/de/catalog/products/8456125
/be/nl
/be/nl/catalog/productsaz/
/be/nl/catalog/products/4578542

当然array_merge似乎是显而易见的选择,但我似乎无法弄清楚它在这种情况下是如何工作的。所以我确实尝试了更长的手段,虽然效率不高,但它似乎应该对我有用但却没有(来自市场阵列的变量似乎无法解决)

这是我到目前为止所做的:

function builder($clusterArray,$marketArray,$urlArray) {
if(isset($_POST['server'])) {
    $server = $_POST['server'];
    // DETERMINE THE CLUSTER
    $cluster=false;
    foreach($clusterArray as $n=>$c)
        if(in_array($server,$c)) {
            $cluster=$n;
            break;
        }
    print("Server=" . $server . "and cluster=" . $cluster); //DEBUG
    // DRAW THE TABLE
    //print("<table><tr><th>MARKET</th>");

    // LOOP THROUGH MARKETS AND IDS TO CREATE AN ARRAY OF URL'S 
    $urlsTohit = array();
    $baseurl = "http://$server";
    foreach($marketArray as $mkt) {
        $market = $mkt['market'];
        $storeid = $mkt['storeid'];
        $langid = $mkt['langid'];
        $storenumber = $mkt['storenumber'];
        $prodid = $mkt['prodid'];
        $artid = $mkt['artid'];
        foreach($urlArray as $template){
            array_push($urlsTohit,$baseurl . $template);        
        }
    }
    print_r($urlsTohit); //DEBUG
} else {
    print("Oops! Seems like you forgot to select a server. Please go back and choose a server before clicking on Go!");
}
}
编辑:根据@Eugen Rieck,我已将我的功能更新为:

function preSurfBuilder($clusterArray,$marketArray,$urlArray) {
if(isset($_POST['server'])) {
    $server = $_POST['server'];
    // DETERMINE THE CLUSTER
    $cluster=false;
    foreach($clusterArray as $n=>$c)
        if(in_array($server,$c)) {
            $cluster=$n;
            break;
        }
    print("Server=" . $server . "and cluster=" . $cluster); //DEBUG
    // DRAW THE TABLE
    //print("<table><tr><th>MARKET</th>");

    // LOOP THROUGH MARKETS AND IDS TO CREATE AN ARRAY OF URL'S 
    $baseurl = "http://$server";
    $result=array();
    foreach ($urlArray as $u) {
        foreach ($marketArray as $m) {
            $uu=$u;
            foreach ($m as $k=>$v)
                $uu=str_replace('$'.$k, $v, $uu);
            $result[]=$uu;
            }
        }
    print_r($result);
} else {
    print("Oops! Seems like you forgot to select a server. Please go back and choose a server before clicking on Go!");
}
}

,输出类似于(截断):

Array ( [0] => / [1] => / [2] => / [3] => / [4] => / [5] => / [6] => / [7] => / [8] => / [9] => / [10] => / [11] => / [12] => / [13] => / [14] => / [15] => / [16] => / [17] => / [18] => / [19] => / [20] => / [21] => / [22] => / [23] => / [24] => / [25] => / [26] => / [27] => / [28] => / [29] => / [30] => / [31] => / [32] => / [33] => / [34] => / [35] => / [36] => / [37] => //catalog/productsaz/ [38] => //catalog/productsaz/ [39] => //catalog/productsaz/ [40] => //catalog/productsaz/ [41] => //catalog/productsaz/ [42] => //catalog/productsaz/ [43] => //catalog/productsaz/ [44] => //catalog/productsaz/ [45] => //catalog/productsaz/ [46] => //catalog/productsaz/ [47] => //catalog/productsaz/ [48] => //catalog/productsaz/ [49] => //catalog/productsaz/ [50] => //catalog/productsaz/ [51] => //catalog/productsaz/ [52] => //catalog/productsaz/ [53] => //catalog/productsaz/ [54] => //catalog/productsaz/ [55] => //catalog/productsaz/ [56] => //catalog/productsaz/ [57] => //catalog/productsaz/ [58] => //catalog/productsaz/ [59] => //catalog/productsaz/ [60] => //catalog/productsaz/ [61] => //catalog/productsaz/ [62] => //catalog/productsaz/ [63] => //catalog/productsaz/ [64] => //catalog/productsaz/ [65] => //catalog/productsaz/ [66] => //catalog/productsaz/ [67] => //catalog/productsaz/ [68] => //catalog/productsaz/ [69] => //catalog/productsaz/ [70] => //catalog/productsaz/ [71] => //catalog/productsaz/ [72] => //catalog/productsaz/ [73] => //catalog/p

1 个答案:

答案 0 :(得分:3)

$result=array();
foreach ($default as $d) {
  foreach ($markets as $m) {
    $dd=$d;
    foreach ($m as $k=>$v)
      $dd=str_replace('$'.$k, $v, $dd);
    $result[]=$dd;
  }
}

print_r($result);
相关问题