многообразие подходов к решению простой задачи

SA739

Cogito, ergo sum
PHP:
// --------------------------------
// is_empty(&$arr);
// returns:
//		1 - if true
//		0 - if false
//	   -1 - if $arr is not an array
// --------------------------------
function is_empty(&$arr) {
	if (is_array($arr)) {
		for ($i = 0; $i <= count($arr); $i++) {
			if ($arr[$i] != '') {
				return "0";
			}
		}
		return "1";
	} else {
		return "-1";
	}
}
ЗЫ. или я чего-то не понял??
 

Demiurg

Guest
SA739
ты не понял, человек хочет сам во всем разобраться и написать сам.
 

IntenT

SkyDiver
А как вам вариант вообще без цикла??
PHP:
<?
$a = array("one" => "", "two" => ""); 

function append($a, $b){
 $a .= $b;
 return $a;
}

if(strlen(array_reduce($a,"append"))){
  echo "есть не пустые";
} else {
  echo "все пустые";
}

?>
 

HG_Morfey

Guest
Можно так.

задаем цикл проверки элементов массива
пока не пройдет весь массив

перед циклом ставим переменную пусть S=0.

в цикле ставим условие
если элемент пустой
переменной ничего не делается
если элемент НЕ пустой
S++
енд цикла

цикл прошел(проверили весь массив)
получили переменную S

далее проверяем ее, если она равна 0,
значит все элементы пусты
если не равна ноль - значит есть не пустые элементы.
+ ты имеешь число не пустых элементов.

Это то что нужно?

//Сорри - не заметил что здесь две страницы,
//подскажите плз как удалять сообщения?

2 Demiurq
Я прочитал только первую страницу,
потому и привел свое решение,
очень сожалею.
 

Pavlenych

Guest
Во-первых я не пойму, чем таким интересным привлекла к себе эта тема? Во-вторых, на сколько я понял, проблема заключается в реализации логики, но ни как не в написание каких-то непонятнодлинющих решений, придумывания всевозможных функций. Если вопрос стоит в том, что-бы проверить, существует, хотя бы один элемент массива, отличный от "", то реализация такой проблемы занимает ровно 3 секунды и столько же,а точнее 3 строчки. Причём одно из решений проблем привел HG_Morfey. Если я чего-то не допонимаю, прошу меня поправить?!?!
 

Falc

Новичок
Pavlenych
>>реализация такой проблемы занимает ровно 3 секунды и столько же,а точнее 3 строчки.

1 строчка, смотри мой ответ выше.
 

Demiurg

Guest
Pavlenych
Все очень просто, человекуц надо было разобраться, помочь в составлении алгаритма и его реализации, с чем он, как мы видели, успешно справился. Оданко на форуме очень много индивидов, которые считают, что если они знают правильный ответ, то надо его обязательно сказать вне зависимости от того дали уже ответ или нет до них. И их нисколько не волнует что на самом деле нужно человеку.
 

гоша

Guest
> помочь в составлении алгаритма и его реализации

Никакого алгоритма здесь не требуется. В пхп на все случаи жизни имеется встроенная функция, и человека надо просто ткнуть носом в нее (или в мануал вообще).

В данном случае

PHP:
$q=array_count_values($a);

есть-пустые-элементы = isset($q[""]);
все элементы пустые = $q[""]==count($a);
 

Demiurg

Guest
гоша
ты не прав, необязательно перелапачивать весь массив, что бы понять, что он не пустой.
 

Demiurg

Guest
гоша
хочешь проверить на паре тысяч элементов массива ? :)
 

гоша

Guest
откровенно говоря, лень. :)
но в своей правоте я почти убежден.
если хочешь, разубеди меня.
 

Demiurg

Guest
1:
<?php

$a = range(0 , 2000);

$q=array_count_values($a);

if(isset($q[""]) && $q[""]==count($a))
echo "все элементы пустые";


?>

Concurrency Level: 1
Time taken for tests: 2.461 seconds
Complete requests: 100
Failed requests: 0
Broken pipe errors: 0
Total transferred: 16500 bytes
HTML transferred: 0 bytes
Requests per second: 40.63 [#/sec] (mean)
Time per request: 24.61 [ms] (mean)
Time per request: 24.61 [ms] (mean, across all concurrent requests)
Transfer rate: 6.70 [Kbytes/sec] received

2:
<?php

$a = range(0 , 2000);


$isnEmpty = 0;
foreach($a as $val)
if($val!="")
{
$isnEmpty = 1;
break;
}

if(!$isnEmpty)
echo "все элементы пустые";


?>

Concurrency Level: 1
Time taken for tests: 1.387 seconds
Complete requests: 100
Failed requests: 0
Broken pipe errors: 0
Total transferred: 16500 bytes
HTML transferred: 0 bytes
Requests per second: 72.10 [#/sec] (mean)
Time per request: 13.87 [ms] (mean)
Time per request: 13.87 [ms] (mean, across all concurrent requests)
Transfer rate: 11.90 [Kbytes/sec] received

убедительно?
могу сказать, что на 20 елементах второй вариант все равно работает быстрее.
 

Falc

Новичок
Demiurg
Если не трудно, сравни еще:
if( join( '',$a) == '' ) echo "все элементы пустые";

На скольки элементах начнет проигрывать, просто интересно.
 

Demiurg

Guest
Falc
на 5 где то, кстати на 2000 он медленние гошиного варианта.
 

гоша

Guest
$a = range(0 , 2000);

очень смешно, да.

для данного случая, очевидно, лучший алгоритм будет просто

empty($a[0]);
 

Falc

Новичок
Demiurg
>>на 5 где то, кстати на 2000 он медленние гошиного варианта.

Не думал что join() такой медленый :(
 

Demiurg

Guest
гоша
разве ты не знал, что тот кто платит, тот и музыку заказывает.
такой массив тебе нравится:
$a = array("" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "a" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "a" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "a" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "a" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "a" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "a" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "a" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "a" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" ,"" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" , "" );
 
Сверху