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

Форум PHP

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

 

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

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

тема: Вывод массива - обработка обращения к несуществующему индексу
 
 автор: soloway   (09.03.2007 в 01:48)   письмо автору
 
 

Есть что-то вроде:
шаблон.php

<?php echo $text[$id]?>

массив.php

<? php
$text
["t1"]="Текст 1 ";
$text["t2"]="Текст 2 ";
$text["t3"]="Текст 3 ";
?> 

В данном случае: site.ru/index.php?id=t1 (t2 или t3) естественно работает, а site.ru/index.php?id=t4 уже приводит к ошибке...

Вопрос:
Можно ли сделать вот так и соответственно, если можно, то как?

<? php
$text
["t1"]="Текст 1 ";
$text["t2"]="Текст 2 ";
$text["t3"]="Текст 3 ";
$text["все остальные значения"]="Текст 777";
?> 

Т.е. идея такая, что бы при вводе ключей, явно не обозначенных выводился "Текст 777"?

   
 
 автор: dim0s   (09.03.2007 в 02:19)   письмо автору
 
   для: soloway   (09.03.2007 в 01:48)
 

Ну вот так приблизительно:


<? php 
$valid
=array_keys($text); // возвратит  массив $valid  с ключами от $text

// ежли $id нет в $valid
if(!in_array($id$valid)) 
    { 
    echo
"777";
    }
?>

   
 
 автор: soloway   (09.03.2007 в 08:32)   письмо автору
 
   для: dim0s   (09.03.2007 в 02:19)
 

Спасибо, всё ОК.
Только вот это:

if(!in_array($id, $valid))
    {
   echo"777";
    } 

Ни в какую не работало корректно, в итоге, силой мысли придумал следующее:

if(!in_array($id, $valid))
    {
    $text[$id]="777";
    }

Словом не знаю, правильно или нет, но вроде всё работает.

Ещё раз спасибо, dim0s! Очень выручил!

   
 
 автор: soloway   (09.03.2007 в 10:44)   письмо автору
 
   для: soloway   (09.03.2007 в 08:32)
 

А возможно-ли это дело усложнить ещё в таком плане?

$text["theme"]="Текст 1 "; 

Задача стоит такая, что бы значение $text["theme"]="Текст 1"; было справедливо не только для

www.site.ru/index.php?id=theme

но и для, скажем:

www.site.ru/index.php?id=theme33

Т.е., что бы значение этой переменной выводилось как для ключа theme, так и для ключа themeХХХ, где Х - любая цифра от 0 до 9...

Возможно ли так?
Как думаю, тут нужно создать ещё одну переменную, например $num, присвоить ей значение равное 0-9 или не равное ничему (т.е. в случае, если id=theme) и с ней уже разбираться... Но вот как это практически сделать - не тяну.
Словом, если не сложно, ответьте плз, в правильном-ли направлении идёт мысль, ну и пару строк кода - если возможно...
)))

   
 
 автор: ZuArt   (09.03.2007 в 11:04)   письмо автору
 
   для: soloway   (09.03.2007 в 10:44)
 

Может и туповато, но я бы сделал так:


$text[1] = "1";
$text[2] = "1";
$text[3] = "1";
$text["reg"] = array();
 $text["reg"]["/^theme[0-9]*$/i"] = "theme";
 $text["reg"]["/^tpl[0-9]*$/i"] = "tpl";

$id = $_GET["id"]; // ну или любым другим способом - не суть =)
$res = "если совсем ни по до что не подходит";

if((isset($text[$id]))and(!is_array($text[$id])))
 $res = $text[$id]
else 
 foreach($text["reg"] as $ptr => $val)
 {
  if(!preg_match($ptr, $id)) continue;
  $res = $val; break;
 };

echo $res;


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

ну и сделана маленькая проверка на тот случай, если "случайно" получится $id = идентификации массива с рег. выражениями (они же индексы).

   
 
 автор: soloway   (09.03.2007 в 11:09)   письмо автору
 
   для: ZuArt   (09.03.2007 в 11:04)
 

Спасибо!
Сейчас попробую.

Добавлено:
Да, всё отлично срослось!
В очередной раз спасибо!

   
Rambler's Top100
вверх

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