[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Вопрос по массивам
Rombl4
Привет. В общем проблема такая. Есть массив:
$device = array (file ('files/laptop.txt'), file ('files/netbook.txt'));

При выводе его на экран получается вот такой результат:

Array
(
[0] => Array
(
[0] => dell laptop

[1] => acer laptop

[2] => sony laptop

[3] => asus laptop

[4] => lenovo laptop
)

[1] => Array
(
[0] => dell netbook

[1] => acer netbook

[2] => sony netbook

[3] => asus netbook

[4] => lenovo netbook
)

)

Но если я делаю вот так:
$namefiles = 'file (\'files/laptop.txt\'), file (\'files/netbook.txt\')';
$device = array ($namefiles);

То на экран выводится:
Array
(
[0] => file ('files/laptop.txt'), file ('files/netbook.txt')
)

Вопрос: как сделать так, чтобы код второго варианта
$namefiles = 'file (\'files/laptop.txt\'), file (\'files/netbook.txt\')';
$device = array ($namefiles);

давал результат как в первом варианте? Просто переменная $namefiles будет иметь значение в зависимости от того, сколько файлов будет лежать в папке, к которой обращается скрипт. Потому я такое и делаю.



Спустя 21 минута, 18 секунд (27.06.2010 - 14:01) vagif написал(а):
а ты эти файлы тоже скинь,но фактически должна выводить первый вариант,подругому никак

Спустя 12 минут, 1 секунда (27.06.2010 - 14:13) Rombl4 написал(а):
Цитата
а ты эти файлы тоже скинь


Так и так ведь понятно что за файлы. Файл laptop.txt содержит 5 строк массива с индексом [0], файл netbook.txt - с индексом [1].

Цитата
но фактически должна выводить первый вариант,подругому никак


Я отдельно от основного скрипта тестировал

$namefiles = 'file (\'files/laptop.txt\'), file (\'files/netbook.txt\')';
$device = array ($namefiles);
print_r ($namefiles);


Выводит строку "file ('files/laptop.txt'), file ('files/netbook.txt')"

Спустя 2 минуты, 54 секунды (27.06.2010 - 14:16) olgatcpip написал(а):
Цитата
$namefiles = 'file (\'files/laptop.txt\'), file (\'files/netbook.txt\')';

хм... а что ты хочешь получить?
Цитата
file — Читает содержимое файла и помещает его в массив
Одного файла! А ты ему хочешь дать два?
+ то что я вижу $namefiles - это просто строка

Спустя 6 минут, 20 секунд (27.06.2010 - 14:22) Rombl4 написал(а):
Цитата
хм... а что ты хочешь получить?

Я хочу загнать в массив несколько функций file (в зависимости от того, сколько файлов лежит в папке), через переменную $namefiles.
Цитата
Одного файла! А ты ему хочешь дать два?

Хочу больше.

$device = array (file ('files/laptop.txt'), file ('files/netbook.txt'));
print_r ($device);

Эта конструкция вполне жизнеспособна. Тут хоть сотню файлов добавляй. Только проблема в том, что ручками сотню файлов прописывать в array () как-то не очень охота.

Спустя 8 минут, 5 секунд (27.06.2010 - 14:31) olgatcpip написал(а):
попробуй так
$namefiles=array();
foreach (glob("files/*") as $filename) {
if(!is_file($filename)) continue;
echo "$filename size " . filesize($filename) . "\n";
$namefiles[]=file($filename);
}

Спустя 58 минут, 22 секунды (27.06.2010 - 15:29) Rombl4 написал(а):
Спасибо за код, думаю пригодится, но в данном случае вывод массива через цикл мне не помог.

Спустя 1 минута, 7 секунд (27.06.2010 - 15:30) olgatcpip написал(а):
И что он делает не так?

Спустя 8 минут, 9 секунд (27.06.2010 - 15:38) Rombl4 написал(а):
Цитата
И что он делает не так?


Он все делает так, но я пока что не смог его приспособить к своему скрипту. У меня там еще несколько циклов, вложенных один в другой.

Спустя 9 минут, 21 секунда (27.06.2010 - 15:48) Rombl4 написал(а):
Вот пример скрипта куда я применил предложенный код:

<?php
$anchor = file ('link.txt'); //

for ($z = 0; $z<5;$z++) {
foreach ($anchor as $urls) {
$device=array();
foreach (glob("files/*") as $id => $filename) {
if(!is_file($filename)) continue;
$device[]=file($filename);
$filename = preg_replace ('/files\/(.*).txt/','$1',$filename);
$pattern = "/(<a.*>)(".$filename.")(<\/a>)/";
$replacement = "$1".$device[$id][$z]."$3";
$urls = preg_replace ($pattern,$replacement,$urls);
echo $urls."<br>";
}
}
}

?>


В файле link.txt пару линков:
<a href="domain1.com">laptop</a>
<a href="domain2.com">netbook</a>

Результат скрипта должен быть такой:

<a href="domain1.com">dell laptop</a><br>
<a
href="domain2.com">dell netbook</a><br>
<a
href="domain1.com">acer laptop</a><br>
<a
href="domain2.com">acer netbook</a><br>
<a
href="domain1.com">sony laptop</a><br>
<a
href="domain2.com">sony netbook</a><br>
<a
href="domain1.com">asus laptop</a><br>
<a
href="domain2.com">asus netbook</a><br>
<a
href="domain1.com">lenovo laptop</a><br>
<a
href="domain2.com">lenovo netbook</a><br>

Но пока что он не тот что надо.

Спустя 21 минута, 18 секунд (27.06.2010 - 16:09) Rombl4 написал(а):
аа, блин вот это я лоханулся,

надо было всего лишь echo $urls."<br>"; вынести за фигурную скобку )

<?php
$anchor = file ('link.txt'); //

for ($z = 0; $z<5;$z++) {
foreach ($anchor as $urls) {
$device=array();
foreach (glob("files/*") as $id => $filename) {
if(!is_file($filename)) continue;
$device[]=file($filename);
$filename = preg_replace ('/files\/(.*).txt/','$1',$filename);
$pattern = "/(<a.*>)(".$filename.")(<\/a>)/";
$replacement = "$1".$device[$id][$z]."$3";
$urls = preg_replace ($pattern,$replacement,$urls);

}echo $urls."<br>";
}
}

?>


Теперь заработало. user posted image

Olgatcpip
, спасибо!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.