Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.05.2013, 20:13   #1
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию Создание двумерного массива и его заполение.

Ребята, наверное снег расстал и у меня перестали лыжи ехать, помогите разобраться в "двух строчках кода".

Код:
$onearr = array(array());
$masrech = explode('.',$job);
for ($i=0;$i<count($nnewarr);$i++){
        for ($j=0;$j<count($masrech);$j++){
		$pos = stripos($masrech[$j], $nnewarr[$i]);
		if ( $pos !== false ){
			$onearr[$i][$j] = 1;
		} else {
			$onearr[$i][$j] = 0;
		}
	}
}
Смысл таков, создаю двумерный массив(изначально размеры массива не известны мне) и потом заполняю его нулями и единицами в зависимости от условия. Ошибка вылазит на красных строчках кода, если их закоментировать, коди выполняется, но естественно мой массив не заполен. Что не так ума не приложу, буду благодарен за помощь.
Небесный вне форума Ответить с цитированием
Старый 12.05.2013, 21:03   #2
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

PHP код:
$job 'test.fest.mest';
$nnewarr = array('test','fest','mest','srest');

$onearr = array(array());
$masrech explode('.',$job);
for (
$i=0;$i<count($nnewarr);$i++){
        for (
$j=0;$j<count($masrech);$j++){
        
$pos stripos($masrech[$j], $nnewarr[$i]);
        if ( 
$pos !== false ){
            
$onearr[$i][$j] = 1;
        } else {
            
$onearr[$i][$j] = 0;
        }
    }
}

echo 
"<pre>";
print_r($onearr);
echo 
"</pre>";
?> 
У меня Ваш код отработал без ошибок. Может проблема в данных которые находятся в массивах nnewarr и masrech.
dr.Chas вне форума Ответить с цитированием
Старый 12.05.2013, 23:08   #3
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Если взять вот так:
Код:
if ( $pos !== false ){
	//$onearr[$i][$j] = 1;
	echo "1<br />";
} else {
	//$onearr[$i][$j] = 0;
	echo "0<br />";
}
Все отлично отрабатывается. Отсюда понятное дело, что дело не в данных из массивов nnewarr и masrech. В чем может быть причина, так и не понятно.

Может проблема в php? PHP 5.3.3-7+squeeze15

Код:
root@test:/etc/php5/apache2# php -v
PHP 5.3.3-7+squeeze15 with Suhosin-Patch (cli) (built: Mar  4 2013 14:05:25)
Copyright (c) 1997-2009 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Suhosin v0.9.32.1, Copyright (c) 2007-2010, by SektionEins GmbH
Кстати ваш код отрабатывается на ура. Может памяти не хватает? Ибо действительно большой объем данных приходится лапатить.

Последний раз редактировалось Небесный; 12.05.2013 в 23:12.
Небесный вне форума Ответить с цитированием
Старый 12.05.2013, 23:17   #4
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Цитата:
Сообщение от Небесный Посмотреть сообщение
Кстати ваш код отрабатывается на ура. Может памяти не хватает? Ибо действительно большой объем данных приходится лапатить.
Возможно, вообще сообщение с ошибкой не плохо было бы привести. Оно же есть? Ну и память попробуйте увеличить для скрипта в php.ini.

Последний раз редактировалось dr.Chas; 12.05.2013 в 23:19.
dr.Chas вне форума Ответить с цитированием
Старый 12.05.2013, 23:25   #5
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Крутиться долго, где-то до 3-4мин. Возможно не хватает памяти.
Ошибка 324 (net::ERR_EMPTY_RESPONSE): Сервер разорвал соединение, не отправив данные.

php.ini:
Код:
max_input_time = 640
memory_linit = 1024M
Небесный вне форума Ответить с цитированием
Старый 12.05.2013, 23:43   #6
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Увеличивайте значения и пробуйте. А вообще можете ещё лог почитать, туда должна ошибка записаться. Ну и опишите Вашу задачу, может решения оптимальнее подскажут.
dr.Chas вне форума Ответить с цитированием
Старый 13.05.2013, 00:09   #7
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

error.log чистый, как слеза.

Вот полностью приведенный код, от а до я.
Код:
	ini_set('display_errors', 1);
        error_reporting(E_ALL);

	require('Lingua_Stem_Ru.class');
	include('stopwords.php');
	include('stopword.php');

	$job = file_get_contents('1.txt');

	$text = mb_strtolower($job, 'UTF-8');

	$contents = @str_replace($rearray," ",$text);
	//$contents = $text;

	$tt=explode(' ', $contents);
	$pp = array_diff($tt,$stwords);
	$pp = array_diff($pp, array(''));
	$pp = array_values($pp);
	//print_r($pp);
	$stemmer = new Lingua_Stem_Ru();
	for ($i=0;$i<count($pp);$i++){
		$newarr[$i] = $stemmer->stem_string($pp[$i]);
	}
	$arr = array_count_values($newarr);
	$k=0;
	for ($i=0;$i<count($newarr);$i++){
		if ($arr[$newarr[$i]]>1){
			$nnewarr[$k]= $newarr[$i];
			$k++;
		}
	}

	$onearr = array(array());
	$masrech = explode('.',$job);
	for ($i=0;$i<count($nnewarr);$i++){
		for ($j=0;$j<count($masrech);$j++){
			$pos = stripos($masrech[$j], $nnewarr[$i]);
			if ( $pos !== false ){
				$onearr[$i][$j] = 1;
				//echo "1<br />";
			} else {
				$onearr[$i][$j] = 0;
				//echo "0<br />";
			}
		}
	}
	//$onearr[0][0] = 'xfcgdfghd';
	print_r($onearr);
Небесный вне форума Ответить с цитированием
Старый 13.05.2013, 00:45   #8
Небесный
Зелень
Форумчанин
 
Аватар для Небесный
 
Регистрация: 03.02.2007
Сообщений: 302
По умолчанию

Моя заполняеммая матрица ($onearr[$i][$j]) в тестовом режиме имеет размеры 8386х836, возможно, что и будет больше в реальной работе. Эти размеры велики для данного скрипта?


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

Код:
        for ($i=0;$i<count($nnewarr);$i++){
		for ($j=0;$j<count($masrech);$j++){
			$pos = stripos($masrech[$j], $nnewarr[$i]);
			if ( $pos !== false ){
				$onearr[$i][$j] = true;
			} else {
				$onearr[$i][$j] = false;
			}
		}
	}
Может еще кто-то посоветует, как можно немного ускорить работу скрипта?

Последний раз редактировалось Небесный; 13.05.2013 в 00:59.
Небесный вне форума Ответить с цитированием
Старый 13.05.2013, 12:14   #9
dr.Chas
***
Участник клуба
 
Аватар для dr.Chas
 
Регистрация: 30.07.2007
Сообщений: 1,162
По умолчанию

Так я и говорю Вы опишите задачу словами.
dr.Chas вне форума Ответить с цитированием
Старый 13.05.2013, 12:54   #10
Johnatan
Antimoderаtoris
Участник клуба
 
Регистрация: 08.02.2008
Сообщений: 1,251
По умолчанию

Просто оставлю это здесь:
http://stackoverflow.com/questions/2...eate-big-array
98% из тысячи моих постов сделаны в профильном подфоруме. Я не накручиваю свои посты болтанием в "курилке", а ты?
Johnatan вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Динамическое создание двумерного массива (С++) Артём Волжанкин Помощь студентам 2 12.07.2012 17:17
создание двумерного массива geologg Общие вопросы C/C++ 2 19.04.2012 17:32
Создание двумерного массива объектов класса (С#) Fiamma Помощь студентам 2 17.03.2012 10:43
Создание двумерного массива в С++ JuniorProger Общие вопросы C/C++ 5 15.02.2012 17:20
[Delphi] создание и обработка двумерного массива screep Помощь студентам 5 16.06.2008 19:27