Verification: a143cc29221c9be0

Php array все ключи массива

переход

В последнее время ThinkPHP 5.1 использовался для ряда разработок, потому что он раньше разрабатывался с помощью Laravel, например, небольшая проблема в названии, которую легко реализовать в Laravel. Используйте метод array_first для прямого поиска.

Быстрая реализация

Но ThinkPHP не предоставляет аналогичного метода для быстрой обработки, поэтому есть необходимость в повторной сборке колес? Первый способ, о котором я думаю, — это использовать array_search. Однако официальное решение, представленное в этом методе, предназначено только для простого одномерного поиска по массиву, и результат, возвращаемый индексом, не является найденным результатом. Мы также можем извлекать элементы с помощью индекса. Новый метод array_column, представленный PHP 5.5, может легко реализовать здесь пользовательский интерфейс двумерного поиска. Примечание предоставляет нам небольшой пример.

$userdb=Array
(
    (0) => Array
        (
            (uid) => '100',
            (name) => 'Sandra Shush',
            (url) => 'urlof100'
        ),

    (1) => Array
        (
            (uid) => '5465',
            (name) => 'Stefanie Mcmohn',
            (pic_square) => 'urlof100'
        ),

    (2) => Array
        (
            (uid) => '40489',
            (name) => 'Michael',
            (pic_square) => 'urlof40489'
        )
);

$key = array_search(40489, array_column($userdb, 'uid'));

И это принесло более 800 благодарностей, так что, возможно, вы почувствуете, что можете просто взять индекс таким образом, а затем удалить его с помощью индекса.

Некоторые из них

Однако, если вы снова посмотрите вниз, вы увидите еще одну заметку пользователя, в которой говорится, что, когда мы используем этот метод для достижения двумерного поиска, ваша версия PHP должна быть 5,5+, и в то же время автор сообщает нам об этом.

Поскольку array_column() создаст результирующий массив; он не сохранит ключи вашего многомерного массива. Поэтому, если вы сверитесь со своими ключами, это не сработает. Переверните его: Потому что array_column() создаст новый массив; он не сохранит исходный ключ многомерного массива. Поэтому, если вы проверите свой ключ, он выйдет из строя.

Затем автор также предоставляет нам a.

$people = array(
  2 => array(
    'name' => 'John',
    'fav_color' => 'green'
  ),
  5 => array(
    'name' => 'Samuel',
    'fav_color' => 'blue'
  )
);

$found_key = array_search('blue', array_column($people, 'fav_color')); // 1

// Here, you could expect that the $found_key would be "5" but it's NOT. It will be 1. Since it's the second element of the produced array by the array_column() function.
// Flip it over: Here, you expect $found_key to be "5", but it's not, it's going to be 1. Because it's the second element of the array generated by the array_column() function.

// In addition, the author mentions that
// Secondly, if your array is big, I would recommend you to first assign a new variable so that it wouldn't call array_column() for each element it searches. For a better performance, you could do;
// Flip it over: Second, if your array is large, I recommend that you first assign a new variable so that it does not call array_column() for every element it searches for. In order to get better performance, you can do it.

$colors = array_column($people, 'fav_color');
$found_key = array_search('blue', $colors);

Прочитав эти советы, вы нашли яму, но это еще не конец, потому что, если данные недостаточно чисты, вы используете array_search Реализованная функциональность может быть ограничена in_array . И даже если мы здесь, мы столкнемся с другой ямой. Сначала посмотри на яму.

php 
$userdb = array(
    0 => array(
            'uid' => 100,
            'name' => 'Sandra Shush',
            'url' => 'urlof100'
        ),
 
    '8' => array(
            'uid' => 5465,
            'name' => 'Stefanie Mcmohn',
            'pic_square' => 'urlof100'
        ),
 
    '3' => Array(
            // 'uid' => 5555,
            'name' => 'Michael',
            'pic_square' => 'urlof40489'
        ),
 
    '6' => Array(
            'uid' => 40489,
            'name' => 'Michael',
            'pic_square' => 'urlof40489'
        )
);
 
$found_key = array_search(40489, array_column($userdb, 'uid'));

Давайте угадаем, каким будет $found_key. Ответ таков: 2 。 ??? Потому что при выполнении array_column() третий элемент, uid, аннотируется в данных ключом 3, и PHP игнорирует его и не сохраняет позицию индекса, поэтому в результате получается только три элемента, а четвертый заменяется вверх, потому что индекс массива начинается с 0, поэтому 2 эквивалентно третьему элементу.