2014 dxdy logo

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

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




 
 PHP:Поиск в массиве
Сообщение09.09.2011, 21:50 
Есть трёхмерный массив array['Название_элемента']['Номер_уровня']['Очередь_на_уровне']. Из этого массива нужно выбрать наиболее приоритетный элемент(\array['Название_элемента']). Наиболее приоритетным считается элемент самого большого уровня и самый последний в очереди на уровне.

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

 
 
 
 Re: PHP:Поиск в массиве
Сообщение10.09.2011, 07:29 
Ну так в чём проблема? Напишите. Трудно два числа сравнить и выбрать большее?

 
 
 
 Re: PHP:Поиск в массиве
Сообщение10.09.2011, 09:59 
Боюсь, не всё так просто. Я вот до сих пор не могу понять условие. :)

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

Догадаться невозможно, но можно пофантазировать (псевдокод):
Код:
    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 
Для справки, for each i в php будет соответствовать чему-то вроде
Используется синтаксис PHP
foreach($array as $key => $matrix)
или
Используется синтаксис PHP
while (list($key, $matrix) = each($array))


(Оффтоп)

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

 
 
 
 Re: PHP:Поиск в массиве
Сообщение10.09.2011, 21:12 
Данные разных типов хранят в структурах, и нужен массив структур, по поставленной задаче что-то вроде:

Код:
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 
2Alexu007
Прочитайте заголовок темы. :)

 
 
 
 Re: PHP:Поиск в массиве
Сообщение11.09.2011, 17:09 
Alexu007 в сообщении #482127 писал(а):
T_Data
Плохой стиль. Если уж вы пишете на VCL, надо TData.

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

 
 
 
 Re: PHP:Поиск в массиве
Сообщение11.09.2011, 19:16 
Ну вот, хотел как лучше... а что, существуют языки, где массивы индексируются строкой?

 
 
 
 Re: PHP:Поиск в массиве
Сообщение11.09.2011, 22:00 
Существует много чего. Ассоциативные массивы часто называются просто массивами (а в Lua, например, таблицами), а также ничего не запрещает им быть встроенными в язык. Что и имеем.

 
 
 
 Re: PHP:Поиск в массиве
Сообщение12.09.2011, 23:06 
Аватара пользователя
Возможно, требовалось нечто вроде
код: [ скачать ] [ спрятать ]
Используется синтаксис 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 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group