изменить массив результатов sql на нужный формат в cakephp - PullRequest
1 голос
/ 16 сентября 2011

Я получаю массив имен пользователей, выполняя sql query.it вот так

Array ( 
    [0] => Array (
        [users] => Array (
            [displayname] => Mark
        )
    )
    [1] => Array ( 
        [users] => Array ( 
            [displayname] => Helan
        )
    )
    [2] => Array ( 
        [users] => Array ( 
            [displayname] => Shaun
        )
    )
    [3] => Array ( 
        [users] => Array ( 
            [displayname] => Basu
        )
    )
    [4] => Array ( 
        [users] => Array ( 
            [displayname] => Charit
        )
    )
    [5] => Array ( 
        [users] => Array ( 
            [displayname] => Chris
        )
    )
    [6] => Array ( 
        [users] => Array ( 
            [displayname] => Tony
        )
    )
    [7] => Array ( 
        [users] => Array ( 
            [displayname] => Sam
        )
    )
    [8] => Array ( 
        [users] => Array ( 
            [displayname] => Duck
        )
    )
    [9] => Array ( 
        [users] => Array ( 
            [displayname] => Frank
        )
    )
)

Я хочу воссоздать массив в этот формат

Array ( 'Mark' => 'Mark','Helan' => 'Helan' , ..........,'Frank'=>'Frank')

Как я могу это сделать?

Ответы [ 4 ]

2 голосов
/ 16 сентября 2011
$users = $this->User->find('list',array('fields'=>array('displayname','displayname')));
2 голосов
/ 16 сентября 2011

если вы используете метод find ('list') , вы можете указать поля, и результатом будет простой массив ключ / значение.

Другой способ сделать это - использовать Set Object из библиотеки утилит Core. См. Метод extract ()

Надеюсь, это поможет

1 голос
/ 23 сентября 2011

На самом деле вы запрашиваете Set :: Объединение , что, по сути, является комбинацией того, что предлагает Пьер МАРТИН.

$names = Set::combine($data, '{n}.users.displayname', '{n}.users.displayname');
1 голос
/ 16 сентября 2011

Кажется, что Set :: extract () - это то, что вам нужно здесь, с array_combine () . Вот пример:

// $data contains your find result
$names = Set::extract('/users/displayname', $data);
$formattedData = array_combine($names, $names)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...