-1

我有以下数组:

Array
(
[0] => Array
    (
        [User] => Array
            (
                [firstname] => Chris
                [lastname] => Willis
            )

    )

[1] => Array
    (
        [User] => Array
            (
                [firstname] => Test
                [lastname] => Willis
            )

    )
   ...

我需要将其转换为类似于此的结构:

Array
{
   'Chris-Willis' => 0
   'Test-Willis' => 1
   ....

有哪些数组函数可以帮助做到这一点?

所以它需要是:

  firstname-lastname => id
4

4 回答 4

2
$grouped = array();
foreach ($users as $i => $user) {
    $grouped["{$user['User']['firstname']}-{$user['User']['lastname']}"] = $i;
}

如果数组完全如上所示,这也应该这样做:

$grouped = array_combine(array_map(function ($u) { return join('-', current($u)); }, $users), array_keys($users));
于 2012-10-30T07:14:16.230 回答
1
foreach $original_array as $key=>$temp
{

    $some_other_array[$temp['USER']['firstname']."-".$temp['USER']['lastname']] = $key;
}
于 2012-10-30T07:15:40.713 回答
1

CakePHP 有Set::combine()方法来帮助处理这种情况。

我假设您希望数组值是用户的数据库 ID,而不是数组索引。

$users = $this->User->find('all', array(
  'fields' => array('id', 'firstname', 'lastname'),
));
$usersMap = Set::combine(
  $users,
  array('%1$s-%2$s', '{n}.User.firstname', '{n}.User.lastname') // sprintf() formatting
  '{n}.User.id',
);
于 2012-10-30T21:15:57.183 回答
0

以下代码应该可以解决问题

//$names 是你的数组的名称

$namesId = array();

foreach ($names as $k=>$v) {

$temp = $v["User"]["firstname"] . "-" . $v["User"]["lastname"];
$namesId[$temp] = $k;

}

于 2012-10-30T07:45:02.127 回答