将多维数组转换为一维数组。

5

我正在使用yii2 php框架,我需要访问数据库中的所有用户,以下是我的查询:

$allUsersQuery = new Query;
$allUsersQuery->select(['_id'])->from('user')->where([ 'parent' => new \MongoId($session['company_owner']) ]);
$allUsers = $allUsersQuery->all(); 

当我使用var_dump函数输出$allUsers数组时,它给出以下结果:
array (size=5)
  0 => 
    array (size=1)
      '_id' => 
        object(MongoId)[147]
          public '$id' => string '55d5a227650fc90c35000044' (length=24)
  1 => 
    array (size=1)
      '_id' => 
        object(MongoId)[148]
          public '$id' => string '55d5a22a650fc90c35000047' (length=24)
  2 => 
    array (size=1)
      '_id' => 
        object(MongoId)[149]
          public '$id' => string '55d5a22a650fc90c3500004a' (length=24)
  3 => 
    array (size=1)
      '_id' => 
        object(MongoId)[150]
          public '$id' => string '55d5a22b650fc90c3500004d' (length=24)
  4 => 
    array (size=1)
      '_id' => 
        object(MongoId)[151]
          public '$id' => string '55d5a22b650fc90c35000050' (length=24)

这是一个多维数组。我已经搜索并尝试了几种解决方案,但它们只给我这个结果:

array (size=1)
  '_id' => 
    object(MongoId)[147]
      public '$id' => string '55d5a227650fc90c35000044' (length=24)

以下是我尝试过但未能成功的几种解决方案:
1.
function array_flatten($allUsers) { 
    if (!is_array($allUsers)) { 
        return FALSE; 
    } 
    $allUsersResult = array(); 
    foreach ($allUsers as $key => $value) { 
        if (is_array($value)) { 
            $allUsersResult = array_merge($allUsersResult, array_flatten($value)); 
        } 
        else { 
          $allUsersResult[$key] = $value; 
        } 
    } 
    return $allUsersResult; 
} 

2.

array_reduce($allUsers, 'array_merge', array());

3.

$allUsers = $allUsers[0];

我的期望输出是:
Array('value1', 'value2', 'value3');

如何使这个工作?


你是想从object(MongoId)中获取'$id'的值,还是只想要这些对象的一个平面数组? - user5051310
2个回答

1
你可以简单地遍历数组并收集这些数据。
我刚刚编辑了你的函数:
function array_flatten($allUsers) { 
    if (!is_array($allUsers)) { return FALSE; } 

    $allUsersResult = array(); 
    foreach ($allUsers as $key => $value) { 
        if (!is_array($value)) { return FALSE; } 

        $allUsersResult[] = $value["_id"]->{'$id'};
    } 
    return $allUsersResult; 
} 

你好。它返回一个错误:Undefined property: MongoId::$id,在代码行 $allUsersResult[] = $value["_id"]->id; - Ethelene Laverne
@EtheleneLaverne 好的,我只是不太懂如何很好地使用Mongo。尝试 $allUsersResult[] = (string)$value["_id"]; - Yeldar Kurmangaliyev
现在它已经可以工作了,在Mongo中,代码应该是 $allUsersResult[] = $value["_id"]->{'$id'};。您可以编辑您的答案,这样我就可以标记它 :) - Ethelene Laverne
@EtheleneLaverne 很高兴听到问题已经解决 :) - Yeldar Kurmangaliyev
1
你可不可以直接使用数组助手的 getColumn 函数?http://www.yiiframework.com/doc-2.0/yii-helpers-basearrayhelper.html#getColumn%28%29-detail - BHoft

1
更简单的方法是使用arrayHelper类,通过以下方式获取所需列:
$array = [
    ['id' => '123', 'data' => 'abc'],
    ['id' => '345', 'data' => 'def'],
];
$result = ArrayHelper::getColumn($array, 'id');


});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接