Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> получить массив по его элементу, по-моему это невозможно (?) 
:(
    Опции темы
Irokez
Дата 20.3.2005, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



можно ли получить массив (ссылку на массив), если есть элемент массива (ключ, значение) или ссылка на элемент массива, к примеру:
Код

$a=&$array['a']['b']['c']['d'];
$b=$array['a']['b']['c']['d'];

можно ли получить по $a или $b массив $array?
или хотя бы "родительский" элемент $array['a']['b']['c']?

Это сообщение отредактировал(а) Irokez - 20.3.2005, 20:24
PM   Вверх
Mal Hack
Дата 20.3.2005, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



foreach( $a as $k => $v )
PM ICQ   Вверх
Irokez
Дата 21.3.2005, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Mal Hack хмм..
получить не элементы массива, а массив по элементу
PM   Вверх
Ni@m
Дата 21.3.2005, 12:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 189
Регистрация: 11.3.2004
Где: почти Киев

Репутация: нет
Всего: 6



Врядли. Прийдется парсить массив. Может помочь функция in_array, она говорит, есть ли в массиеве елемент с данным значением.
--------------------
Обучение - как переливание воды из одной чашки в другую: всегда лучше, чтоб чашка со знаниями нахордилась выше.
PM MAIL WWW ICQ   Вверх
Irokez
Дата 21.3.2005, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Ni@m
что значит парсить массив?
и как может помочь функция in_array? разве что перебирая все массивы и искать в котором из них находится заданный элемент ... но это не то.
PM   Вверх
Mal Hack
Дата 21.3.2005, 16:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Irokez
давай точнее. Покажи наглядно, что имеем на входе, и что должны получить на выходе.
PM ICQ   Вверх
Illuminaty
Дата 21.3.2005, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 6
Всего: 56



Может попробовать так?
Не в лоб, а в обход с помощью ООП:)
Код

class Entry {
    var $value;
    var $owner;
    function GetOwner() {
        return $this->owner;    
    }
    
    function Entry($value, $owner) {
        $this->owner = $owner;
        $this->value = $value;
    }
}

class MyArray {
    var $collection;
    function MyArray() {
        $this->collection = array();
    }
    
    function AddEntry(&$new_entry) {
        $new_entry->owner = $this;
        array_push($this->collection, $new_entry);
    }
}

$entr1 = new Entry(5, null);
$entr2 = new Entry(1, null);

$myarr = new MyArray();
$myarr->AddEntry($entr1);
$myarr->AddEntry($entr2);

print_r($entr1->GetOwner());

Элемент хранит сведения о своем владельце.

Это сообщение отредактировал(а) Illuminaty - 21.3.2005, 21:00
PM MAIL ICQ   Вверх
Irokez
Дата 21.3.2005, 21:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



ок, щас проясню ситуацию:
наверное многие сталкивались с вопросом конфигов скриптов - держать отдельный файл, где содержатся переменные используемые в скрипте, этот конфиг должен быть легко управляем, чтобы изменять работу скрипта. Мне понадобилось сделать конфиг с помощью XML.
Используя встроенные в пхп функции для парсинга XML получаю структуру XML документа, теперь мне надо эту структуру запихнуть массив, к примеру если конфиг был:
Код

<config>
   <db>
       <login>root</login>
       <pass>root</pass>
   </bd>
   <ftp>
       <login>root</login>
       <pass>root</pass>
   </ftp>
</config>

то я хочу получить массив следующего вида:
Код

$config=array(
                  'db' => array(
                        'login'=>'root',
                        'pass'=>'root',
                  ),
                  ftp => array(
                        'login'=>'root',
                        'pass'=>'root',
                  ),  
             );

сказано, сделано, пишу скрипт:
Код

<?php
header('Content-Type: text/plain');
$fpath='data.xml';
$fcontent=file_get_contents($fpath);
$parser=xml_parser_create();
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
xml_parser_set_option($parser, XML_OPTION_SKIP_WHITE, 1);
xml_parse_into_struct($parser, $fcontent, $values, $tags);
$error=xml_get_error_code($parser);
if($error)
{
    $column=xml_get_current_column_number($parser);
    $line=xml_get_current_line_number($parser);
    $byte=xml_get_current_byte_index($parser);
    echo xml_error_string($error).' at line: '.$line.', column: '.$column.', byte: '.$byte."\n";
}
xml_parser_free($parser);
$keys=array();
$name='ini';
foreach($values as $tag)
{
    switch($tag['type'])
    {
        case 'open':
        case 'complete':
            array_push($keys, $tag['tag']);
            $e=&$$name;
            $last=array_pop($keys);
            foreach($keys as $key) $e=&$e[$key];
            array_push($keys, $last);
            if(isset($e[$last]))
            {
                if(!is_int($last))
                {
                    $e=&$e[$last];
                    $b=$e;
                    $last=1;
                    $e=null;
                    $e[$last]=$b;
                }
                $last++;
            }
            $e[$last]=$tag['value'];
            if($tag['type']=='complete') array_pop($keys);
            break;
        case 'close':
            array_pop($keys);
            break;
    }
}
print_r($ini);
?>

он почти работает, есть еще проблемы с одинаковыми подряд идущими тегами, но это я исправлю, меня интересует этот кусок:
Код

foreach($keys as $key) $e=&$e[$key];

здесь я используя массив где хранятся ключи элемента получаю ссылку на массив ($array['config']['db']['login']), когда тег закрывается мне надо перейти в родительский элемент, т.е ($array['config']['db']) тут и возникает вопрос: можно ли имея ссылку на элемент массива получить сам массив или родительский элемент данного? чтобы каждый раз не производить цикл (foreach($keys as $key) $e=&$e[$key];)
вот, надеюсь кто-нибудь понял, если хватит терпение читать это все до конца smile
PM   Вверх
Illuminaty
Дата 22.3.2005, 00:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

Репутация: 6
Всего: 56



Можно еще, что легче, хранить ссылку на "родительский" элемент с помощью специального ключа, который не сможет быть создан во время выполнения
Например:
Код

$myarr = array();
$myarr['1'] = array();
$myarr['2'] = 'test_record';
$myarr['1']['--owner--'] = &$myarr;

$test = $myarr['1']['--owner--'];
echo $test['2'];

Выводит test_record
Или я неправильно понимаю вопрос? smile

Это сообщение отредактировал(а) Illuminaty - 22.3.2005, 00:30
PM MAIL ICQ   Вверх
Irokez
Дата 22.3.2005, 20:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


индеец
***


Профиль
Группа: Участник Клуба
Сообщений: 1180
Регистрация: 20.10.2004

Репутация: 22
Всего: 53



Illuminaty, хм это идея, не совсем конечно то, но надо подумать, спасибо, завтра попробую
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0510 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.