代码之家  ›  专栏  ›  技术社区  ›  Ludwig

PHP-数组组合无法正常工作

  •  0
  • Ludwig  · 技术社区  · 9 年前

    我正在尝试进行数组合并,但它不能正常工作。我有一个数组名为 $models 它由对象组成,如下所示:

    array:5 [▼
      0 => Comment {#377 ▶}
      1 => Thumb {#378 ▶}
      2 => View {#379 ▶}
      3 => Vote {#380 ▶}
    ]
    

    然后,由于我要将其传递给另一个函数,我要添加一个对象作为元素,如下所示:

     array_push($models, new User);
    

    然后我得到一个如下所示的数组:

     array:5 [▼
      0 => Comment {#377 ▶}
      1 => Thumb {#378 ▶}
      2 => View {#379 ▶}
      3 => Vote {#380 ▶}
      4 => User {#399 ▶}
    ]
    

    然后,我进行foreach循环,以获取每个模型在数据库中的总计数,如下所示:

    foreach ($models as $model){
      $modelCounts[] = $model->count();
    }
    

    我的 $modelCounts 看起来像这样:

    array:5 [▼
      0 => 19
      1 => 22
      2 => 15
      3 => 17
      4 => 3
    ]
    

    然后我尝试执行array_combine,以便我的对象是关键帧,计数是如下值:

     $result = array_combine($models, $modelCounts);
    

    但有些事情不正常,因为当我这样做时 dd($result); 我得到:

      array:1 [▼
      "[]" => 3
    ]
    

    但当我这样做的时候:

    $result = array_combine($modelCounts, $models);
    

    它工作得很好,我得到:

    array:5 [▼
      19 => Comment {#377 ▶}
      22 => Thumb {#378 ▶}
      15 => View {#379 ▶}
      17 => Vote {#380 ▶}
      3 => User {#399 ▶}
    ]
    

    但我需要的是另一种方式,而不是像这样。

    2 回复  |  直到 9 年前
        1
  •  2
  •   clemens321    9 年前

    对象不能用作关联数组的键,只允许使用标量值。

    http://php.net/manual/en/language.types.array.php

    数组和对象不能用作键。这样做将导致警告:非法偏移类型。

        2
  •  -2
  •   Yeti    9 年前

    第一个原因 array_combine() 失败的是objcect不能用作数组键。 您可能希望首先使用以下命令创建一个包含类名的数组 get_class() 获取类名,然后将其与 $modelCounts

    应该是这样的

    foreach ($models as $model){
      $modelNames[] = get_class($model);
    }
    
    $result = array_combine($modelNames, $modelCounts);