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

Форум PHP

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

 

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

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

тема: Динамически проверить глубину массива
 
 автор: deimand   (19.08.2010 в 15:37)   письмо автору
 
 

не могу дописать функцию выполняющую следующие действия:

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


<?php
 
function issetValueArr($arr$core)
 {
    
$name='core';
    for(
$a=0;$a<count($arr);$a++)
    {
      
$name.='[' .$arr[$a]. ']';
    }
    echo 
$name;
    if (isset($
$name)) echo 'да'; else echo 'нет';
 }

  Ответить  
 
 автор: Usta   (19.08.2010 в 16:46)   письмо автору
 
   для: deimand   (19.08.2010 в 15:37)
 

A зачем вам $$name с двумя?? и зачем тут if если он всегда будет "нет" если $$name и "да" если $name.

<?php
 
function issetValueArr($arr$core)
 {
    
$name='core: ';
    foreach(
$arr as $val)
    {
      
$name.='[' .$val'] ';
    }
    echo 
$name;
    if (isset($
$name)) echo 'да'; else echo 'нет';
 } 
?>

  Ответить  
 
 автор: deimand   (19.08.2010 в 17:11)   письмо автору
 
   для: Usta   (19.08.2010 в 16:46)
 

есть url

http://site.ru/1/2/3/4/5/
нужно проверить существует ли элемент массива $core[1][2][3][4][5]

http://site.ru/5/2/1/
нужно проверить существует ли элемент массива $core[5][2][1]

такое как сделать автоматически?

  Ответить  
 
 автор: sim5   (19.08.2010 в 17:34)   письмо автору
 
   для: deimand   (19.08.2010 в 17:11)
 

А где вы видите в ссылке массив? И откуда вы получаете $core[1][2][3][4][5]?

  Ответить  
 
 автор: deimand   (19.08.2010 в 17:43)   письмо автору
 
   для: sim5   (19.08.2010 в 17:34)
 

>А где вы видите в ссылке массив?

я всего лишь привел пример. ну а если так?

site.ru/file.php?param=1,2,3,4,5

$arr = explode(",", $_GET['param']);

>И откуда вы получаете $core[1][2][3][4][5]?

Вот его я и хочу как то получить, чтобы проверить условием if (isset($core[1][2][3][4][5]))

  Ответить  
 
 автор: sim5   (19.08.2010 в 17:55)   письмо автору
 
   для: deimand   (19.08.2010 в 17:43)
 

Если параметр 1,2,3,4,5, и $arr = explode(",", $_GET['param']);, то count($arr) даст вам число элементов массива. У вас же вопрос не понятен - толи вам нужна глубина вложения, толи вас интересует некое значение, толи бог еще чего....

  Ответить  
 
 автор: deimand   (19.08.2010 в 18:08)   письмо автору
 
   для: sim5   (19.08.2010 в 17:55)
 

то что можно считать количества элементов - я знаю. только при уровне вложенности в 10 - придется вручную описывать 10 ситуаций, а хотелось поместить все в одну функцию, вот и все.

  Ответить  
 
 автор: sim5   (19.08.2010 в 18:22)   письмо автору
 
   для: deimand   (19.08.2010 в 18:08)
 

Каких нафиг ситауаций, если, как я вижу, вы каждое значение в итоге пытаетесь (хотите, хотя бог его значет чего вы хотите) ипользовать как ключ, следовательно глубина вложения у вас всегда будет равна числу элементов этого массива.
У вас вопрос, извиняюсь, задан через задницу, не понять чего вам надо. Если судить по первой ссылке, то вам нужен mod_rewrite. А вообще не понять, чего, зачем, и для чего....

Вот это "она должна проверить наличие значения пятимерного массива" как пониамть?

  Ответить  
 
 автор: deimand   (20.08.2010 в 00:04)   письмо автору
 
   для: sim5   (19.08.2010 в 18:22)
 

Буду на пальцах показывать
к примеру есть массив

<?php 
 $core 
=
 array
 (
   
=> 1,
   
=> 2,
   
=> array
   (
     
=> array
     (
       
=> 3,
       
=> 4,
       
=> 5,
       
=> 6,
     ),
     
=> array
     (
       
=> 7,
       
=> 8,
     ),
     
=> 9,
     
=> 10,
     
=> 11,
     
=> 12,
   ),
   
=> array
   (
     
=> 13,
     
=> 14,
     
=> array
     (
       
=> 15,
     ),
     
=> array
     (
       
=> array
       (
         
=> 16,
         
=> 17,
       ),
       
=> array
       (
         
=> 18,
         
=> 19,
       ),
     ),
   ),
   
=> array
   (
     
=> 19,
     
=> 20,
     
=> 21,
   ),
   
=> 22,
   
=> 23,
 );


вот под него нужно такую ф-ию изобрести, чтобы при ссылке

?param=2,4 на страницу выводилось 11
?param=3,3,0,1 на страницу выводилось 17
?param=3,3,1,1 на страницу выводилось 19
?param=3,3,1 на страницу ничего не выводилось, т.к. массив, а не значение
?param=5,2 на страницу ничего не выводилось, т.к. не существует элемента

echo $core[2][4]; // да - 11
echo $core[3][3][0][1]; // да - 17
echo $core[3][3][1][1]; // да - 19
echo $core[3][3][1]; // нет - array
echo $core[5][2]; // нет - !isset

  Ответить  
 
 автор: sim5   (20.08.2010 в 05:38)   письмо автору
 
   для: deimand   (20.08.2010 в 00:04)
 

Ну а я о чем? Вы задаете вопрос о глубине вложенности, упоминая значение глубины, таким вычурным способом, что понять вас можно только после приема грамм 500. А вам всего лишь нужно узнать значение конкретного элемента в массиве. Вот и пойми вас после этого, чего вы хотите.
Делается это просто - передавайте в параметре значения описывающее этот элемент массива - [2][4], а не 2,4, или если 3,3,1,1, то так, чтобы не было неоднозначностей, коли вы хотите в последствии преварать это в [3][3][1][1] (вот только зачем). А уж проверить наличие в массиве указанного индекса, это плевое дело, и не стоит так заморачиваться, как это вы делаете.

  Ответить  
 
 автор: sim5   (20.08.2010 в 07:09)   письмо автору
 
   для: deimand   (20.08.2010 в 00:04)
 

PS. Массив описанный вами сущестовать не может, ибо в нем ошибки.

  Ответить  
 
 автор: deimand   (20.08.2010 в 11:19)   письмо автору
 
   для: sim5   (20.08.2010 в 07:09)
 

Как это не может? echo не зря же написано, проверьте.

  Ответить  
 
 автор: sim5   (20.08.2010 в 11:24)   письмо автору
 
   для: deimand   (20.08.2010 в 11:19)
 

Зачем же мне проверять, это вам следует проверить, да и echo не проверяет массив. У вас в массивах никчемная запятая после поледних элементов массива - прывкните так делать, напоритесь на неприятности.

  Ответить  
 
 автор: nikita2206   (20.08.2010 в 13:40)   письмо автору
 
   для: sim5   (20.08.2010 в 11:24)
 

похапе ведь позволяет это делать. вобще этот язык страшно расхолаживает.

  Ответить  
 
 автор: sim5   (20.08.2010 в 13:46)   письмо автору
 
   для: nikita2206   (20.08.2010 в 13:40)
 

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

  Ответить  
 
 автор: nikita2206   (20.08.2010 в 13:50)   письмо автору
 
   для: sim5   (20.08.2010 в 13:46)
 

Я и говорю - расхолаживает. Большинства глупых вопросов на этом форуме не было бы, если бы тут была строгая типизация, хотя я против этого.

  Ответить  
 
 автор: sim5   (19.08.2010 в 18:23)   письмо автору
 
   для: deimand   (19.08.2010 в 18:08)
 

-

  Ответить  
 
 автор: Trianon   (19.08.2010 в 19:10)   письмо автору
 
   для: deimand   (19.08.2010 в 15:37)
 

<?php
function issetValueArr($arr$core)
{
    
    foreach(
$arr as $term)
    {
        if(!
is_array($core))
            return 
null;
        
$core= @$core['term'];
        if(
$core === null)
            return 
null;
    }
    return 
$core;
}

  Ответить  
 
 автор: deimand   (21.08.2010 в 16:40)   письмо автору
 
   для: Trianon   (19.08.2010 в 19:10)
 

спасибо

  Ответить  
Rambler's Top100
вверх

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