Как разгруппировать элемент в многомерном массиве? - PullRequest
0 голосов
/ 30 августа 2011

У меня есть функция, которая получает пользователей из базы данных MySQL, строки результатов могут быть 1 или несколько строк.

Что меня раздражает, так это то, что когда я ищу только 1 результат из БД,он возвращает мне многомерный массив, подобный этому:

$result = array([0]=>array('foo'=>'bar'))

И заставляет меня писать неприятный код вроде:

$e = $result[0]['foo'] // instead of $result['foo']

Я почти уверен, что многие люди сталкивались с такой ситуацией,я подумал, что было бы здорово, если бы я мог проверить, была ли возвращена только одна строка, а затем добавить $result несгруппированную версию, чтобы я мог использовать ее, когда я ищу только 1 строку.так было бы так:

$result = array(
 [0] => array('foo'=>'bar'), // will keep the multi-dimentional version
 'foo' => 'bar' // and append the ungrouped version of $result here
);

Как это сделать?

Ответы [ 2 ]

3 голосов
/ 30 августа 2011
if ( count($result) === 1)
{
    $result = $result[0];
}
0 голосов
/ 30 августа 2011

Звучит так, будто в вашем API что-то немного шаткое.

Если у вас есть функция, которая может возвращать от 1 до n результатов из базы данных, то к ней следует получить доступ через средства доступа к массиву (например, $result[0]['foo']).В качестве альтернативы, вы можете сохранить результат во временной переменной, например:

$o = $result[0];
print_r($o['foo']);

Проблема с выполнением того, что вы запрашиваете, заключается в том, что вы копируете свои возвращаемые данные в особом случае, чтоне только сбивает с толку тех, кто может использовать ваш код, но и очень подвержен ошибкам, потенциально оставляя пользователя интересующимся, почему он не может получить доступ к 0-му элементу $result.

функцийкоторые возвращают единственный элемент, должны возвращать единственный элемент.Функции, которые возвращают несколько элементов, должны возвращать несколько элементов (и не менять их данные в особых случаях).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...