Проверьте с помощью phpinfo (), чтобы убедиться, что путь к php.ini совпадает с заданным. На компьютерах с Windows несколько экземпляров php.ini часто создаются и вызывают путаницу.
Кроме того, вызов php из командной строки выдаст вам сообщение об ошибке с более подробной информацией о том, почему он может не загружаться. Возможно, расширение, которое вы пытаетесь включить, несовместимо с вашей установкой PHP. то есть это не поточнобезопасная dll с двоичным потокобезопасным бинарным файлом или есть несоответствие компилятора где-то, где использовались оба vc9 и vc6.
index of будет искать запись ... MovieClip.name == "foo" должно выдать ошибку компилятора, поскольку MovieClip не имеет свойства "name" ... myMovieClip.name == "foo" будет true , и тогда вы получите индекс true, если он вообще есть в массиве ...
если вам действительно нужен индекс, вам нужно будет перебирать массив ... по ключу ... или в инкрементном цикле, если массив числовой и плотный ... если массив ассоциативен (используются строковые ключи), вам обязательно нужно использовать циклы for-in, поскольку фильтр и связанные функции будут охватывать только числовые индексы ...
в числовом массиве, я бы предложил один из следующих двух подходы:
//this will return an array of all indices
myArray.map(function (val:*,index:int,...rest):int { return (val.name == "foo") ? index : -1 }).filter(function (val:int,...rest):Boolean { return val != -1 });
//here a more reusable utility function ... you may want to put it to some better place ... just as an example ...
package {
public class ArrayUtils {
public static function indexOf(source:Array, filter:Function, startPos:int = 0):int {
var len:int = source.length;
for (var i:int = startPos; i < len; i++)
if (filter(source[i],i,source)) return i;
return -1;
}
}
}
//and now in your code:
var i:int = ArrayUtils.indexOf(myArray, function (val:*,...rest):Boolean { return val.name == "foo" });
надеюсь, что помогло ...;)
greetz
back2dos
Изучите метод фильтрации массива (недавно доступный для AS3). Вы можете написать метод фильтра, который будет возвращать все объекты, которые будут соответствовать вашим критериям (в вашем случае - фрагмент ролика с определенным именем)
myMovieClip.name == "foo";
^ == если вы хотите назначить переменную, используйте
myMovieClip.name = "foo";
Хотя метод back2dos - это круто, я думаю, новичкам он может показаться слишком сложным, поэтому для них это более простой метод, который может быть проще в использовании, но не быть таким же универсальным для любой ситуации, как и метод back2dos.
var myArray:Array = new Array();
var myMovieClip1 = new MovieClip();
var myMovieClip2 = new MovieClip();
myMovieClip1.name = "foo";
myMovieClip2.name = "bar";
myArray.push(myMovieClip1);
myArray.push(myMovieClip2);
function getIndexByName(array:Array, search:String):int {
// returns the index of an array where it finds an object with the given search value for it's name property (movieclips, sprites, or custom objects)
for (var i:int = 0; i < array.length; i++) {
if (array[i].name == search) {
return i;
}
}
return -1;
}
trace("bar index = "+getIndexByName(myArray, "bar"));
trace("foo index = "+getIndexByName(myArray, "foo"));
Вот что я сделал. Измените имя функции, если хотите ... это все просто для пояснения.
getObjectFromArrayByProperty(arrayToSearch, 'oBjectProperty', 'value');
function getObjectFromArrayByPoperty(array:Array, _property, search:String):Object{
for (var i:int = 0; i < array.length; i++) {
if (array[i][_property] == search) {
return array[i];
}
}
return null;
}
Это возвращает объект, а не просто индекс. Если совпадение не найдено, функция возвращает null.