2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 PHP:Поиск в массиве
Сообщение09.09.2011, 21:50 


06/07/11
5
Есть трёхмерный массив array['Название_элемента']['Номер_уровня']['Очередь_на_уровне']. Из этого массива нужно выбрать наиболее приоритетный элемент(\array['Название_элемента']). Наиболее приоритетным считается элемент самого большого уровня и самый последний в очереди на уровне.

Необходим код, позволяющий таким образом выбрать приоритетный элемент

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение10.09.2011, 07:29 


24/05/09

2054
Ну так в чём проблема? Напишите. Трудно два числа сравнить и выбрать большее?

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение10.09.2011, 09:59 
Заслуженный участник


26/07/09
1559
Алматы
Боюсь, не всё так просто. Я вот до сих пор не могу понять условие. :)

Возможно ТС интересует способ перебрать все элементы массива, индексируемого строкой, а не числом. А может ещё что-то...

Догадаться невозможно, но можно пофантазировать (псевдокод):
Код:
    input: a[][][]
    vars: m, r
    f=true
    for each i
        for each j
            for each k
                if f==true or a[i][j][k]>m
                    m=a[i][j][k]
                    r=i
                    f=false
    result: r

Т.е., может быть именно в for each i проблема...

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение10.09.2011, 14:32 
Заслуженный участник


26/07/09
1559
Алматы
Для справки, for each i в php будет соответствовать чему-то вроде
Используется синтаксис PHP
foreach($array as $key => $matrix)
или
Используется синтаксис PHP
while (list($key, $matrix) = each($array))


(Оффтоп)

Так, а как на этом форуме писать знак доллара в сообщениях? :)

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение10.09.2011, 21:12 


24/05/09

2054
Данные разных типов хранят в структурах, и нужен массив структур, по поставленной задаче что-то вроде:

Код:
struct T_Data
{
AnsiString    Name_of_Element;
int           Nomber_Lavel;
int           Nom_of_Level;
}


T_Data My_Data [100];


И язык программирования неплохо бы указывать бы...

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение11.09.2011, 16:09 
Заслуженный участник


26/07/09
1559
Алматы
2Alexu007
Прочитайте заголовок темы. :)

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение11.09.2011, 17:09 
Заслуженный участник


27/04/09
28128
Alexu007 в сообщении #482127 писал(а):
T_Data
Плохой стиль. Если уж вы пишете на VCL, надо TData.

И не nomber, а number; перевод же названий полей структуры вообще неправильный. Так по-английски не пишут.

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение11.09.2011, 19:16 


24/05/09

2054
Ну вот, хотел как лучше... а что, существуют языки, где массивы индексируются строкой?

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение11.09.2011, 22:00 
Заслуженный участник


27/04/09
28128
Существует много чего. Ассоциативные массивы часто называются просто массивами (а в Lua, например, таблицами), а также ничего не запрещает им быть встроенными в язык. Что и имеем.

 Профиль  
                  
 
 Re: PHP:Поиск в массиве
Сообщение12.09.2011, 23:06 
Аватара пользователя


12/09/11
4
Возможно, требовалось нечто вроде
код: [ скачать ] [ спрятать ]
Используется синтаксис PHP
// $myArray =  array['Название_элемента']['Номер_уровня']['Очередь_на_уровне'];

$myArray = array("Полоний" => array(1 => array(10 => "foo")));
/* Как я понял, массив выглядит таким вот образом;
индексы Номер_уровня и Очередь_на_уровне - беззнаковые целочисленные */


$elementName; // Название элемента
$oldNumLevel; // Наибольший найденный номер уровня
$oldPosStack; // Наибольший найденный уровень очереди

foreach($myArray as $key => $value){ // перебираем все элементы уровня "Название_элемента"

    $numLevel = max(array_keys( $value )); // Наибольший из ключей "Номер_уровня"
    $posStack = max(array_keys( $value[$numLevel] )); // Наибольший из ключей уровня "Очередь_на_уровне"

    if ($oldNumLevel <= $numLevel)
        if($oldPosStack <= $posStack){
             // Записываем индексы найденного
             $oldNumLevel = $numLevel;
             $oldPosStack  = $posStack;
             $elementName = $key;
        }
}

echo $myArray[$elementName][$oldNumLevel][$oldPosStack];


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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 10 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group