Нужно обьяснить.

Тема в разделе "PHP", создана пользователем Алексей Рябченко, 5 янв 2009.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Алексей Рябченко

    Алексей Рябченко Постоялец

    Регистр.:
    9 фев 2008
    Сообщения:
    75
    Симпатии:
    2
    У меня такая просьба может ли кто разжевать что происходит в вот этой строке
    PHP:
    $hosts[$prefs['host']][] = $link;
    Пример:
    PHP:
    $links explode("\n"$links);
    foreach(
    $links as $link){
                         
    $prefs parse_url($link);
                          
    $hosts[$prefs['host']][] = $link;
                }
     
  2. sartiii

    sartiii Постоялец

    Регистр.:
    17 сен 2008
    Сообщения:
    105
    Симпатии:
    17
    Банальное присваивание значения массиву. Первые главы любого учебника.

    Код:
    $links = explode("\n", $links);			// разбить переменную $links по строкам
    foreach($links as $link){				// пройтись по каждой строке
    	$prefs = parse_url($link);			// в $prefs записать информацию о URL из строки
    	$hosts[$prefs['host']][] = $link;	// в $hosts сохранить имя хоста
    }
    А вот этот фразмент наглядно покажет что происходит:
    Код:
    echo '<pre>';
    $links = explode("\n", $links);			// разбить переменную $links по строкам
    echo 'Список ссылок: '; print_r($links); echo "\n";
    foreach($links as $k => $link){				// пройтись по каждой строке
    	$prefs = parse_url($link);			// в $prefs записать информацию о URL из строки
    	echo 'Ссылка №'.$k.': <u>'. $links. '</u> распотрашена как: '; print_r($prefs); echo "\n";
    	$hosts[$prefs['host']][] = $link;	// в $hosts сохранить имя хоста
    }
    echo 'Результат всего этого: '; print_r($hosts); echo "\n";
    echo '</pre>';
     
  3. Jacob

    Jacob

    Регистр.:
    18 окт 2006
    Сообщения:
    257
    Симпатии:
    18
    в двухмерный массив добавляется значение. пустые скобки квадратные говорят - взять значение последнего индекса и прибавить 1.

    а в указанном примере из ссылок выдираются домены и формируется массив массивов, где индекс - это домен, а значение массив ссылок с этим доменом
     
  4. Алексей Рябченко

    Алексей Рябченко Постоялец

    Регистр.:
    9 фев 2008
    Сообщения:
    75
    Симпатии:
    2
    в $hosts сохранить имя хоста - а что находитсяь или должно находится в пустых квадратных скобках.

    И что получается
    PHP:
     $hosts[имя хоста][1 и т.д] = $link
    извините поспешил с вторым вопросом.
     
  5. Jacob

    Jacob

    Регистр.:
    18 окт 2006
    Сообщения:
    257
    Симпатии:
    18
    короче, чтобы было понятнее

    $lala[] = 'x';
    $lala[] = 'x';
    $lala[] = 'x';
    $lala[] = 'x';

    есть тоже самое что


    $lala[0] = 'x';
    $lala[1] = 'x';
    $lala[2] = 'x';
    $lala[3] = 'x';

    то есть индексы сами подставляются по порядку, не нужно лишних телодвижений
     
  6. Yfo

    Yfo Создатель

    Регистр.:
    30 окт 2007
    Сообщения:
    43
    Симпатии:
    4
    В массиве $hosts собираются все ссылки из исходного списка, только разбитые по домену.
    Например, при обращении $hosts["domain.ru"] будет доступен список(массив с числовым индексом) всех ссылок на domain.ru. Каждая отдельная ссылка будет доступна $hosts["domain.ru"][0], $hosts["domain.ru"][1] и т.д.
     
  7. Simpson

    Simpson

    Регистр.:
    22 июл 2007
    Сообщения:
    373
    Симпатии:
    36
    поскольку тема по массивам, то допишу и свой вопрос:

    есть абстрактный массив:
    a[5]=х1
    a[6]=х2
    a[12]=х3
    a[68]=х4
    a[45590]=х5

    какой самый простой способ получить эти цифры - 5,6,12,68,45590, тоесть значения индексов?
     
  8. Yfo

    Yfo Создатель

    Регистр.:
    30 окт 2007
    Сообщения:
    43
    Симпатии:
    4
    Есть функция array_keys()
     
  9. Jacob

    Jacob

    Регистр.:
    18 окт 2006
    Сообщения:
    257
    Симпатии:
    18
  10. Алексей Рябченко

    Алексей Рябченко Постоялец

    Регистр.:
    9 фев 2008
    Сообщения:
    75
    Симпатии:
    2
    Кое что написал. но методом тыка. так как в этих массивах я плохо розбираюсь.

    PHP:
    <?php
      
    //if (isset($_POST[''])) {$ = $_POST[''];}
      
    if (isset($_POST['linki_p'])) {$linki_p $_POST['linki_p'];}
      if (isset(
    $_POST['name_p'])) {$name_p $_POST['name_p'];}
      if (isset(
    $_POST['rozmer_p'])) {$rozmer_p $_POST['rozmer_p'];}
      if (isset(
    $_POST['mb'])) {$mb $_POST['mb'];}
      if (isset(
    $_POST['gb'])) {$gb $_POST['gb'];}
         
    $rozmer_p trim($rozmer_p); // удаление конечных и начальных пробельных символов
          
    $rozmer_p str_ireplace(".",",",$rozmer_p); // если в поле где то присутствует точка заменяем ее на запятую
    ?>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
    <title>Оформление ссылок</title>
    <link href="css.css" rel="stylesheet" type="text/css">
    </head>
    <body>
    <?php

                    $links 
    "$linki_p";
                     
    $links explode("\n"$links);


     if (isset(
    $_POST['go']))
     {
    ?>


    <table width="600" border="0" align="center" cellpadding="0" cellspacing="0" class="tb">
      <tr><td align="center" valign="top">
      <textarea cols='72' rows='10'><?
      echo"<p><br></p><br><br /><br /><p>[size=2][color=#FF0000][b]Скачать $name_p ($rozmer_p MB):[/b][/color][/size]</p><p><br /></p>[quote]";

                foreach($links as $link){
                         $prefs = parse_url($link);
                          $hosts[$prefs['host']][] = $link;
                }

                foreach($hosts as $host => $link){  // $link[0] - Ссылки, $host - Название сервера

                       $host=str_ireplace("www.","",$host);
                        $host=ucfirst($host);
                         $host=str_ireplace("rapidshare.com","[color=#001A49]Rapidshare.com[/color]",$host);
                          $host=str_ireplace("depositfiles.com","[color=#FF9933]Depositfiles.com[/color]",$host);
                           $host=str_ireplace("LetItBit.net","[color=#FF66CC]LetItBit.net[/color]",$host);
                            $host=str_ireplace("VIP-file.com","[color=#0033FF]VIP-file.com[/color]",$host);
                             $host=str_ireplace("sms4file.com","[color=#5A7C0B]Sms4file.com[/color]",$host);
                              if ($host != "[color=#001A49]Rapidshare.com[/color]" ||
                                            "[color=#FF9933]Depositfiles.com[/color]" ||
                                             "[color=#FF66CC]LetItBit.net[/color]" ||
                                              "[color=#0033FF]VIP-file.com[/color]" ||
                                               "[color=#5A7C0B]Sms4file.com[/color]")
                              {
                                  $host=str_ireplace("$host","[color=#666666]".$host."[/color]",$host);
                              }

                    if(count($link) == 1){
                        $l=$l+1;
                         if ($l == 1){echo " c  ";}else{echo "&nbsp;|&nbsp;";}
                          echo "[size=2][b][url=".$link[0]."]".$host."[/url][/b][/size]";

                    }else{


                         echo "<p><br /></p>c  [size=2][b]".$host."[/b][/size]\n";

                          foreach($link as $index => $linki){ // $linki - Ссылкм в частях
                                   $index=$index+1;
                                    if ($index == 1){}else{echo "&nbsp;+&nbsp;";}
                                     echo "[size=1][b][url=http://".$linki."][color=#666666]Часть ".$index."[/color][/b][/size][/url]";

                          }

                    }

                }
                echo "<p><br /></p><p><br /></p>[spoiler=Список ссылок]".$linki_p."[/spoiler][/quote]";
    ?></textarea>
    <?
     }
    ?>




           </td>
        </tr>
        </table>



    <form action="" method="post">
    <table width="600" border="0" align="center" cellpadding="0" cellspacing="0" class="tb">
      <tr>
        <td colspan="2" class="tb_2">Сылки:</td>
      </tr>
      <tr>
        <td width="200" class="td_1">Название проги:</td>
        <td width="400"><input name="name_p" type="text" value="<?=$name_p?>" size="67"></td>
      </tr>
      <tr>
        <td class="td_1">Размер:</td>
        <td><input name="rozmer_p" type="text" value="<?=$rozmer_p?>" size="10">
          </td>
      </tr>
      <tr>
        <td colspan="2">
        <textarea name="linki_p" cols="72" rows="10"><?=$linki_p?></textarea>
    </td>
      </tr>
      <tr>
        <td colspan="2"><input name="go" value="Отправить" type="submit"></td>
      </tr>
    </table>
    </form>


    </body>
    </html>
    Что из этого вышло, если используем этом код:

    Код:
    [size=2][color=#FF0000][b]Скачать xxxxxxxxxxxxxx (23,0 MB):[/b][/color][/size] 
    
    c  [size=2][b][url=http://vip-file.com/xxxxxxx
    ][color=#666666][color=#0033FF]VIP-file.com[/color][/color][/url][/b][/size]
    
    c  [size=2][b][color=#666666][color=#FF66CC]LetItBit.net[/color][/color][/b][/size]
    [size=1][b][url=http://http://letitbit.net/xxxxxxx
    ][color=#666666]Часть 1[/color][/b][/size][/url] + [size=1][b][url=http://http://letitbit.net/xxxxxxx
    ][color=#666666]Часть 2[/color][/b][/size][/url]
    
    c  [size=2][b][color=#666666][color=#FF9933]Depositfiles.com[/color][/color][/b][/size]
    [size=1][b][url=http://http://depositfiles.com/xxxxxxx
    ][color=#666666]Часть 1[/color][/b][/size][/url] + [size=1][b][url=http://http://depositfiles.com/xxxxxxx
    ][color=#666666]Часть 2[/color][/b][/size][/url]
    
    c  [size=2][b][color=#666666][color=#001A49]Rapidshare.com[/color][/color][/b][/size]
    [size=1][b][url=http://http://rapidshare.com/xxxx
    ][color=#666666]Часть 1[/color][/b][/size][/url] + [size=1][b][url=http://http://rapidshare.com/xxx
    ][color=#666666]Часть 2[/color][/b][/size][/url] | [size=2][b][url=][/url][/b][/size]
    Есть ли у кого вопросы, поправки, и т.д.
     
Статус темы:
Закрыта.