php получают 1-е значение массива (ассоциативный или не)

Этот мог бы походить на глупый вопрос. Как я получаю 1-е значение массива, не зная заранее, ассоциативен ли массив или нет?

Для получения 1-го элемента массива я думавший сделать это:

function Get1stArrayValue($arr) { return current($arr); }

это в порядке? Это могло создать проблемы, если бы массив внутренний указатель был перемещен перед вызовом функции? Существует ли better/smarter/fatser способ сделать это?

Спасибо!

5
задан Marco Demaio 9 February 2010 в 15:26
поделиться

3 ответа

Лучшей идеей может быть использование reset, которая "перематывает внутренний указатель массива на первый элемент и возвращает значение первого элемента массива"

Пример:

function Get1stArrayValue($arr) { return reset($arr); }

Как отметил @therefromhere в комментарии ниже, это решение не идеально, поскольку оно изменяет состояние внутреннего указателя. Однако я не думаю, что это большая проблема, поскольку другие функции, такие как array_pop, также сбрасывают его.
Главное опасение, что ее нельзя использовать при итерации по массиву, не является проблемой, поскольку foreach работает с копией массива. В руководстве PHP говорится:

Если массив не является ссылочным, foreach работает с копией указанного массива, а не с самим массивом.

Это можно показать с помощью простого тестового кода:

$arr = array("a", "b", "c", "d");
foreach ( $arr as $val ){
    echo reset($arr) . " - " . $val . "\n";
}

Результат:

a - a
a - b
a - c
a - d
9
ответ дан 13 December 2019 в 22:07
поделиться

Чтобы получить первый элемент любого массива, вам нужно сначала сбросить указатель. http://ca3.php.net/reset

function Get1stArrayValue($arr) { 
  return reset($arr); 
}
1
ответ дан 13 December 2019 в 22:07
поделиться

Возможно, по звуку необходимо перехватить WM _ PRINTCLIENT , подключившись к глобальной процедуре окна, если используется WM_PRINTCLIENT сообщение, просто вернуться из процедуры подключенного окна. Для получения подробной информации о WM _ PRINTCLIENT см. здесь. Другой способ сделать это - перехватить функции буфера обмена, где данные из конкретного приложения, а буфер обмена содержит растровое изображение.. Смотрите блог Ларри Остермана об этом . Вот статья на CodeProject , которая реализует глобальный крюк Windows, есть две другие ссылки, которые я могу предоставить здесь и здесь . (Все в CodeProject)

Надеюсь, что это поможет, С уважением, Том.

-121--3941983-
  1. log4j обработает инструкцию журнала и проверит, включен ли конкретный журнал на определенном уровне регистрации. Если это не так, то инструкция не будет записана в журнал.

  2. Эти проверки значительно дешевле, чем фактическая запись на диск (или консоль), но они все еще оказывают влияние.

  3. нет, java не имеет такого понятия, как # ifdef (в любом случае вне рамки, там есть предкомпилизаторы java)

-121--3090684-

Если вы не против потерять первый элемент из массива, вы также можете использовать

array _ shift () - сдвигает первое значение массива и возвращает его, сокращая Все ключи числового массива будут изменены, чтобы начать отсчет с нуля, в то время как ключи литерала не будут касаться.

Или можно обернуть массив в ArrayIterator и использовать seek :

$array = array("foo" => "apple", "banana", "cherry", "damson", "elderberry");
$iterator = new ArrayIterator($array);
$iterator->seek(0);
echo $iterator->current(); // apple

Если это не вариант, используйте одно из других предложений.

0
ответ дан 13 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: