Извлечение и группирование данных базы данных в массив - PullRequest
0 голосов
/ 07 января 2012

У меня есть поле базы данных под названием "серверы" Это поле содержит ссылку в каждой строке, содержимое этого поля:

> http://www.rapidshare.com/download1
> http://www.rapidshare.com/download2
> http://www.rapidshare.com/download3
> http://www.megaupload.com/download1
> http://www.megaupload.com/download2
> http://www.megaupload.com/download3
> http://www.fileserve.com/download1
> http://www.fileserve.com/download2
> http://www.fileserve.com/download3

Я хочу создать массив со всеми именами серверов и создать дополнительный массив со ссылками внутри. Вот так и должно быть:

$servers = array(
  'rapidshare'        => array(
      'link1'             => 'http://www.rapidshare.com/download1',
      'link2'             => 'http://www.rapidshare.com/download2',
      'link3'             => 'http://www.rapidshare.com/download3'),
  'megaupload'        =>  array(
      'link1'             => 'http://www.megaupload.com/download1',
      'link2'             => 'http://www.megaupload.com/download2',
      'link3'             => 'http://www.megaupload.com/download3'),
  'fileserve'         =>  array(
      'link1'             => 'http://www.megaupload.com/download1',
      'link2'             => 'http://www.megaupload.com/download2',
      'link3'             => 'http://www.megaupload.com/download3')
);

Ответы [ 2 ]

1 голос
/ 07 января 2012

Это поможет: (убедитесь, что домен действительно отображается в переменной $ domain, хотя это может быть $ match [1] ... я не могу вспомнить)

$newStructure = array();
foreach($links as $link) {
    preg_match("/www\.([^\.])\.com/",$link,$matches);
    $domain = $matches[0];

    $currentLength = count($newStructure[$domain]);
    if($currentLength) {
       $newStructure[$domain]['link'.($currentLength+1)] = $link;
    } else {
       $newStructure[$domain] = array('link1'=>$link);
    }
}
0 голосов
/ 07 января 2012
$server = array(
    'http://www.rapidshare.com/download1',
    'http://www.rapidshare.com/download2',
    'http://www.rapidshare.com/download3',
    'http://www.megaupload.com/download1',
    'http://www.megaupload.com/download2',
    'http://www.megaupload.com/download3',
    'http://www.fileserve.com/download1',
    'http://www.fileserve.com/download2',
    'http://www.fileserve.com/download3'
);

$match = array();
$myarray = array();


foreach($server as $v) {
    // grab server name
    preg_match('/\.(.+)\./', $v, $match);
    $serverName = $match[1];

    // initialize new array if its the first link of that particular server
    if (!isset($myarray[$serverName])) {
        $myarray[$serverName] = array();
    }

    // count server array to check how many links are there, and make next link key 
    $linkKey = 'link' . (count($myarray[$serverName]) + 1);

    // store value
    $myarray[$serverName][$linkKey] = $v;
}

print_r($myarray);

Эй, может быть, это поможет вам.Но я не вижу назначения этих имен ключей (link1, link2 и т. Д.).Это не будет работать на нумерацию страниц.

...