Как получить все ассоциативные массивы по ключу?
Есть массив, который я получаю из БД (через mysqli_fetch_all), в каждом из них есть ключ (который является id из другой таблицы). Мне нужно наименее трудозатратным способом достать эти массивы. Вот пример массива:
[
0 => [
'post_id' => '4'
'thread_id' => '1'
'username' => 'user'
'message' => 'Сообщение'
]
1 => [
'post_id' => '7'
'thread_id' => '2'
'username' => 'user'
'message' => 'Сообщение'
]
2 => [
'post_id' => '9'
'thread_id' => '1'
'username' => 'user'
'message' => 'Сообщение'
]
]
Из этого него мне нужно получить все ассоциативные массивы, в которых thread_id == '1', т.е. чтобы получился такой массив:
[
0 => [
'post_id' => '4'
'thread_id' => '1'
'username' => 'user'
'message' => 'Сообщение'
]
1 => [
'post_id' => '9'
'thread_id' => '1'
'username' => 'user'
'message' => 'Сообщение'
]
]
Знаю, что можно пройтись просто циклом и проверять какое значение thread_id, но я думаю что это будет работать не так быстро, т.к. каждый раз будет проходиться по всем элементам. Смотрел документацию php, но я там того что мне надо не нашел, возможно плохо искал.
Ответы (1 шт):
Уж не знаю как у Вас устроена БД. Но, я бы конечно тоже как и комментаторы использовал sql-запрос, чтобы наименее затратным способом получить нужные Вам данные. Но, как говорится, хозяин-барин. Раз у Вас возникло желание сделать это на php, то как говорится получите и распишитесь
$data = [
0 => [
'post_id' => '4',
'thread_id' => '1',
'username' => 'user',
'message' => 'Сообщение'
],
1 => [
'post_id' => '7',
'thread_id' => '2',
'username' => 'user',
'message' => 'Сообщение'
],
2 => [
'post_id' => '9',
'thread_id' => '1',
'username' => 'user',
'message' => 'Сообщение'
]
];
function arraySearchByKeyAndValue($keyValue = [], $searchArray = [] ) {
$result = [];
if ( is_array( $keyValue ) && count( $keyValue ) > 0 && is_array( $searchArray ) && count( $searchArray ) > 0) {
foreach( $keyValue as $searchKey => $searchValue ) {
foreach( $searchArray as $sArray ) {
if ( is_array( $sArray ) && count( $sArray ) > 0 ) {
if ( in_array( $searchKey, array_keys( $sArray ) ) && $sArray[$searchKey] == $searchValue && !in_array( $sArray, $result ) ) {
$result[] = $sArray;
}
}
}
}
}
return $result;
}
$result = arraySearchByKeyAndValue( [ 'thread_id' => '1' ], $data );
var_dump( $result )
Функция получилась довольно гибкой. Вы можете искать сразу по нескольким условиям (учтите, что условия не "суммируются" а-ля "AND" в sql )
$result = arraySearchByKeyAndValue( [ 'thread_id' => '1', 'post_id' => '4' ], $data );