Функция PHP Key () для ActionScript 3? - PullRequest
1 голос
/ 15 марта 2012

Функция Key () в php:

Функция key () просто возвращает ключ элемента массива, на который в данный момент указывает внутренний указатель.Он никак не двигает указатель.Если внутренний указатель указывает за конец списка элементов или массив пуст, key () возвращает NULL.

Есть ли что-то похожее на AS3.0?

Также включенопримечание: означает ли .= в php то же самое, что и +=?

Вот пример того, чего я пытаюсь достичь.Основываясь на приведенной выше информации о функции PHP Key (), преобразованной в actionScript 3.

По сути, в PHP это то, для чего используется Key ():

<?php
$array = array(
    'fruit1' => 'apple',
    'fruit2' => 'orange',
    'fruit3' => 'grape',
    'fruit4' => 'apple',
    'fruit5' => 'apple');

// this cycle echoes all associative array
// key where value equals "apple"
while ($fruit_name = current($array)) {
    if ($fruit_name == 'apple') {
        echo key($array).'<br />';
    }
    next($array);
}
?>

В приведенном выше примере будет выводиться:

fruit1fruit4fruit5

Вы можете увидеть больше на: http://ca3.php.net/manual/en/function.key.php

Ответы [ 2 ]

1 голос
/ 19 марта 2012

В вашем примере массив php используется в качестве хэш-карты или словаря. документация гласит:

Массив в PHP [...] может рассматриваться как массив, список (вектор), хеш-таблица (реализация карты), словарь, коллекция, стек, очередь и, возможно, многое другое.

Для этого в as3 есть специальный класс, который называется Dictionary. Вы также можете использовать Array или любой другой динамический объект для достижения той же функциональности. Но давайте использовать Dictionary здесь. документация гласит:

ActionScript 3.0 представляет расширенный тип ассоциативного массива, который называется словарь ...

Кроме того, функции current() и next() так или иначе являются реализациями шаблона итератора , который не имеет встроенного эквивалента в as3. Но наиболее близким к предоставленному вами коду, я думаю, является использование простого цикла for..in:

for (var key:String in dictionary) {
    if (dictionary[key] == "apple")
        trace(key);
}
1 голос
/ 15 марта 2012

Насколько я понимаю, вы пытаетесь сделать это:

Функция (не думайте, что вы хотите сделать встроенной, хотя это может быть):

function getKey(array:Array, find:*):String
{
    for(var i:String in array)
    {
        if(array[i] == find) return i;
    }

    return "";
}

И тестовый код:

var test:Array = [];

test["example"] = "hello";
test["something"] = "there";


trace(getKey(array, "hello")); // "example"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...