Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Диапазон в массив
 
 автор: Mefisto84   (12.12.2007 в 17:29)   письмо автору
 
 

Не могу въехать, как засунуть диапазон в массив? Облазил весь форум не нашел ничего подобного. Нужно что-то типо:
$array1['20..50']="Первый массив";
$array2['51..70']="Второй массив";
Но так как написал я не работает, перепробовал всевозможные варианты, ничего не получается.

   
 
 автор: sim5   (12.12.2007 в 17:37)   письмо автору
 
   для: Mefisto84   (12.12.2007 в 17:29)
 

$array1(20,30,40,50)

   
 
 автор: Mefisto84   (12.12.2007 в 17:54)   письмо автору
 
   для: sim5   (12.12.2007 в 17:37)
 

это диапазон? не работает так.

   
 
 автор: sim5   (12.12.2007 в 17:55)   письмо автору
 
   для: Mefisto84   (12.12.2007 в 17:54)
 

А что вы подразумеваете под диапазоном - array(50...100)?

   
 
 автор: Mookapek   (12.12.2007 в 21:16)   письмо автору
 
   для: Mefisto84   (12.12.2007 в 17:29)
 

Каждый элемент массива имеет свой индекс.

   
 
 автор: mihdan   (12.12.2007 в 22:16)   письмо автору
 
   для: Mefisto84   (12.12.2007 в 17:29)
 

1. цикл от - до
2. eval()

   
 
 автор: Mefisto84   (13.12.2007 в 13:47)   письмо автору
 
   для: mihdan   (12.12.2007 в 22:16)
 

to sim5
под диапазоном я подразумеваю диапазон, то есть диапазон от 50 до 60 это - 50, 51, 52, 53...60.
Так что, нельзя что-ли просто без всяких фукнций и прочей дрибедени засунуть в массив диапазон? Мне кажется что я такое где-то видел, но не могу найти. То есть через простое объявление массива.

   
 
 автор: KPETuH   (13.12.2007 в 13:49)   письмо автору
 
   для: Mefisto84   (13.12.2007 в 13:47)
 


<?
$mass
=array(10,11,12,13);

   
 
 автор: kasmanaft   (13.12.2007 в 14:14)   письмо автору
 
   для: Mefisto84   (13.12.2007 в 13:47)
 

Зачем Вам это?

   
 
 автор: mihdan   (13.12.2007 в 14:16)   письмо автору
 
   для: kasmanaft   (13.12.2007 в 14:14)
 

а чтоб потом его распечатать попорядку ;)

а вообще - то


<?
$array1 
range(2050);
$array2 range(5170);
?>


Как говорил мой преподаватель по матанализу Ростовцев В. - "Читайте лекции", на что я скажу - "Читайте мануал по РНР"

   
 
 автор: kasmanaft   (13.12.2007 в 14:36)   письмо автору
 
   для: mihdan   (13.12.2007 в 14:16)
 

>> а чтоб потом его распечатать попорядку ;)
Ну это и без массива сделать можно :)


Не знаю зачем это может понадобится..

   
 
 автор: Mefisto84   (13.12.2007 в 18:11)   письмо автору
 
   для: kasmanaft   (13.12.2007 в 14:36)
 

опять все не то! :-)
нужна именно запись вида
$a[10..50]="первый массив";
Вопрос в том, что должно быть вместо .. в квадратных скобках? Или такая запись вообще невозможна? Мне казалось что я такое где-то встречал, может я ошибаюсь?

   
 
 автор: kasmanaft   (13.12.2007 в 18:15)   письмо автору
 
   для: Mefisto84   (13.12.2007 в 18:11)
 

Вы говорите на каком-то другом языке :))
Для чего это нужно? Может быть, какой пример приведите, как хотите потом с этим массивом работать.

Или это из других языков, где размерность массива нужно точно объявлять? В PHP делать этого не нужно..

   
 
 автор: sim5   (13.12.2007 в 18:16)   письмо автору
 
   для: Mefisto84   (13.12.2007 в 18:11)
 

Только не в РНР.

   
 
 автор: MIchail1982   (13.12.2007 в 18:21)   письмо автору
 
   для: Mefisto84   (13.12.2007 в 18:11)
 

может криво, но если я понял вашу идею

<?php
for ($i=20;$i<=70;$i++)
   {
   if (
$i<=50)
      
$a[$i] = "первый массив";
   else
      
$a[$i] = "второй массив";
   }

зы тож голову ломаю зачем это может быть нужно

   
 
 автор: sim5   (13.12.2007 в 18:25)   письмо автору
 
   для: MIchail1982   (13.12.2007 в 18:21)
 

Ну зачем, ведь есть готовое, и уже показанное:
$array1 = range(50, 60);
Интересно бы знать зачем такой массив.

   
 
 автор: Mefisto84   (13.12.2007 в 18:32)   письмо автору
 
   для: sim5   (13.12.2007 в 18:25)
 

циклом for конечно можно, но это не очень удобно. Зачем нужно? Ну вот к примеру, есть такие массивы:
$first[12..36]="Да";
$first[[45..58]="Нет";
$first[[69..130]="Может быть";
Затем мы получаем переменную $i, которая равна скажем 54.
Делаем запись вида $first[$i];
В итоге получаем конкретный ответ. Ну это так, лишь абстрактный пример. Так вот повторю вопрос, как мне забить вот эти диапазоны?
Можно сделать так
$first[12]="Да";
$first[13]="Да";
...
$first[46]="Нет";
но ведь это не выход, слишком много. Ведь можно как-то по другому.

   
 
 автор: sim5   (13.12.2007 в 18:40)   письмо автору
 
   для: Mefisto84   (13.12.2007 в 18:32)
 

array[12..36] - это вы в Delphi могли видеть, в РНР такого нет. Если вы знаете крайние значения диапазона, зачем вам массив, чтобы узнать, входит ли полученное число в этот диапазон?

   
 
 автор: Mefisto84   (13.12.2007 в 18:58)   письмо автору
 
   для: sim5   (13.12.2007 в 18:40)
 

как зачем? затем что так проще чем прогонять число через цикл for.

   
 
 автор: sim5   (13.12.2007 в 19:11)   письмо автору
 
   для: Mefisto84   (13.12.2007 в 18:58)
 

Если нужно узнать, воходит ли 20 в диапазон чисел от 10 до 30, то обязательно потребуется цикл?

   
 
 автор: mihdan   (14.12.2007 в 00:22)   письмо автору
 
   для: Mefisto84   (13.12.2007 в 18:11)
 

Тогда так


<?
$array1 
array_fill(1050'Да');
$array2 array_fill(5170'Нет');
?>

   
 
 автор: Mefisto84   (14.12.2007 в 13:43)   письмо автору
 
   для: mihdan   (14.12.2007 в 00:22)
 

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

   
 
 автор: KPETuH   (14.12.2007 в 13:52)   письмо автору
 
   для: Mefisto84   (14.12.2007 в 13:43)
 

просто вы городите непонятную конструкцию непонятно для чего :)

не проще ли

<?
if ($i>=and $i<=50$otvet='Да';
elseif (
$i>50 and $i<=100$otvet='Нет';

   
 
 автор: Mefisto84   (14.12.2007 в 18:21)   письмо автору
 
   для: KPETuH   (14.12.2007 в 13:52)
 

to KPETuH
Прикольный у Вас ник! :-)
Конечно можно и так, но хотелось ведь что бы все было красиво. Все таки на много сложней конструкция получится. Вот к примеру, нужно для разного возраста пользователя выводить разные слова, типо 20 ЛЕТ, 21ГОД, 22 ГОДА...50 ЛЕТ, 51 ГОД, 52 ГОДА... И какого размера тогда получится конструкция? А так бы я просто подставлял переменную echo $array[$i]; и все было бы здоровско. :-)

   
 
 автор: sim5   (14.12.2007 в 18:25)   письмо автору
 
   для: Mefisto84   (14.12.2007 в 18:21)
 

1 - это "год", от 2 по 4 это "года", все остальное "лет". Вот и все решение.

PS. Только в втором десятке исключение.

   
 
 автор: mihdan   (14.12.2007 в 18:42)   письмо автору
 
   для: Mefisto84   (14.12.2007 в 18:21)
 


<?
$i 
120;
$array1 array_fill(1050'Да');
$array2 array_fill(6070'Нет');
$array3 array_fill(12010'Не знаю');

$array array_merge($array1$array2$array3);

echo 
$array[$i];
?> 

   
 
 автор: kasmanaft   (14.12.2007 в 19:29)   письмо автору
 
   для: mihdan   (14.12.2007 в 18:42)
 

Ну что Вы советуете?

   
 
 автор: mihdan   (15.12.2007 в 12:12)   письмо автору
 
   для: kasmanaft   (14.12.2007 в 19:29)
 

То что просили то и написал, а что что-то не так?

   
 
 автор: Mefisto84   (15.12.2007 в 19:07)   письмо автору
 
   для: mihdan   (15.12.2007 в 12:12)
 

to sim5
Нет, не решение, так как во всех десятках есть исключения: 31 год, 32 года, 35 лет и так далее.

to mihdan
Ну что-то похожее, но тоже не совсем. Почему при таком варианте решения на входную $i=1 на выходе получаем "Да"? По идее вообще ничего не должно быть? Так же, почему на входные $i=59 получаем ответ "нет"? по идее же должно быть "Да"?

   
 
 автор: sim5   (15.12.2007 в 19:12)   письмо автору
 
   для: Mefisto84   (15.12.2007 в 19:07)
 

Зачем вам десятки? Если возраст более 4 и менее 21 то это "лет" (это исключение из правил:)). В остальных случаях забирайте только младший разряд возраста и проверяйте по нему, ну неужели это сложно?

   
 
 автор: udpn   (15.12.2007 в 20:41)   письмо автору
 
   для: sim5   (15.12.2007 в 19:12)
 

а давайте все дружно попросим автора указать конкретную задачу? надоел весь этот огород.
зы это нужно не столько нам, сколько ему самому, чтобы понять че ему надо

   
 
 автор: kasmanaft   (16.12.2007 в 08:06)   письмо автору
 
   для: mihdan   (15.12.2007 в 12:12)
 

>> То что просили то и написал, а что что-то не так?
Нужно объяснить, что так делать не нужно :-)

<?php
for ($i 1$i 150$i++) {
    
$age = (string)$i;

    
$len strlen($age) ;
    if (
$len == || $len == && $age[0] !== "1" || $len 2)
        switch (
$age[$len-1]) {
            case 
'1' $age .= ' год'; break;
            case 
'2' $age .= ' года'; break;
            case 
'3' $age .= ' года'; break;
            case 
'4' $age .= ' года'; break;
            default  : 
$age .= ' лет'; break;
        }
    else 
$age .= ' лет'

    echo 
$age"<br />";
}
?>


>>Почему при таком варианте решения на входную $i=1 на выходе получаем "Да"? По идее вообще ничего не должно быть? Так же, почему на входные $i=59 получаем ответ "нет"? по идее же должно быть "Да"?
Это из-за array_merge(), она сдвинула ключи... посмотрите с помощью print_r()

PS 60+70 = 130 ;-)

   
 
 автор: Mefisto84   (16.12.2007 в 19:42)   письмо автору
 
   для: kasmanaft   (16.12.2007 в 08:06)
 

to udpn
А разве задача про возраст пользователя не конкретная?

kasmanaft
:-) Спасибо конечно.
Действительно 60+70=130 я и не обратил внимания.
Все это понятно, но просто не хотелось применять такие громоздкие конструкции, как говорил раньше - хотелось сделать все это проще. Но раз такой возможности нет, значит буду извращаться. :-)

   
 
 автор: exp   (17.12.2007 в 16:37)   письмо автору
 
   для: Mefisto84   (16.12.2007 в 19:42)
 

с возрастами так правильнее работает

<?php
for ($i 0$i 150$i++)
{
switch(
$i)
    {
    case (
$i 100) < 21 && ($i 100) > :
        echo 
$i ' лет<br>';
    break;

    case (
$i 10) == 1:
        echo 
$i ' год<br>';
    break;
    case (
$i 10) == 0:
        echo 
$i ' лет<br>';
    break;
    case (
$i 10) < 5:
        echo 
$i ' года<br>';
    break;
    default:
        echo 
$i ' лет<br>';
    break;
    
    }

}

вычислений только больше получается походу

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования