Как эффективно найти пары ключ-значение в многомерном массиве PHP? - PullRequest
2 голосов
/ 10 июня 2010

У меня есть массив на PHP в результате следующего запроса к базе данных Wordpress:

SELECT * FROM wp_postmeta WHERE post_id = :id

Мне возвращается многомерный массив, который выглядит следующим образом:

Array ( [0] => Array ( [meta_id] => 380 [post_id] => 72 [meta_key] => _edit_last       [meta_value] => 1 )

... и т. д.

Как лучше всего найти конкретную пару ключ-значение в этом массиве?

Например, как бы я расположил строку, где [meta_key] = имя-события, чтобы я мог извлечь значение [meta_value] той же строки в переменную PHP?

Я понимаю, что могу превратить этово многие отдельные запросы MySQL.У кого-нибудь есть мнение об эффективности выполнения 10 запросов SQL подряд, а не поиска в массиве 10 раз?Я думаю, так как массив находится в памяти, это будет самый быстрый способ найти нужные мне значения.

В качестве альтернативы, есть лучший способ для запроса базы данных с самого начала, чтобы мой набор результатов был отформатировантаким образом, что легче искать?

Ответы [ 2 ]

1 голос
/ 10 июня 2010

Предположим, что вы всегда хотите искать столбцы «meta_key», создавая массив, который вы можете сделать примерно так:

$arr = array();
while($row = $mysqli->fetch_assoc()){
    $arr[$row['meta_key']] = $row;
}

Тогда у вас будет ассоциативный массив со значением «meta_key» в качестве основного индекса. Но в этом случае «meta_key» должен быть уникальным, иначе вы бы перезаписали значения.

Ваш пример выглядел бы так:

Array ( [_edit_last] => Array ( [meta_id] => 380, [post_id] => 72, [meta_key] => _edit_last, [meta_value] => 1 )

И вы можете легко получить «meta_value», используя индекс:

$var = $arr['_edit_last']['meta_value'];

Это то, что вы хотели иметь?

РЕДАКТИРОВАТЬ : Если у вас есть больше, чем одно значение для каждого «meta_key», вы также можете создать многомерный массив для каждого ключа. Просто используйте эту строку в цикле while:

$arr[$row['meta_key']][] = $row;

Затем у вас будет массив для каждой строки для каждого «meta_value», поэтому ваш массив может выглядеть следующим образом:

Array ( [_edit_last] => Array ( [0] => Array( [meta_id] => 380, [post_id] => 72, [meta_key] => _edit_last, [meta_value] => 1 ) )

Затем вы можете использовать другой цикл, чтобы получить все значения из группы значений "meta_key".

0 голосов
/ 11 июня 2010

На основании предоставленного вами массива выполните следующие действия:

$multiArray = Array ( [0] => Array ( ['meta_id'] => 380, ['post_id'] => 72, ['meta_key'] => _edit_last, ['meta_value'] => 1 );
$needleKey = 'meta_key';
$needle = 'event_name';

foreach ($multiArray as $key => $data) {
    if ($data[$needleKey] == $needle) {
        echo $key;
        break;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...