【问题标题】:getting emptied while checking if an array value exists - laravel?在检查数组值是否存在时被清空 - laravel?
【发布时间】:2022-01-04 12:59:44
【问题描述】:

如果$m 中不存在该ID,我想插入$courseCatid 值。在下面的代码中,我觉得$m 数组每次都被清空,所以所有ID 都是插入到$m 中,dump($m) 的结果表明。我该如何解决这个问题?

$m=[];
$courseCat = MyCourse::where('course_id', $key['courseId'])->get()->toArray();
foreach($courseCat as $k=>$c){
  // dump($courseCat);
    if(!in_array($c['id'],$m)){
           array_push($m,$c['id']);
      }
}
//dump($m); 

dump($courseCat); 显示如下结果

    array:2 [
      0 => array:19 [
        "id" => 2
        "course_id" => 18
      ]
      1 => array:19 [
        "id" => 3
        "course_id" => 18
      ]                                   
    ]
   array:2 [
      0 => array:19 [
        "id" => 2
        "course_id" => 18
      ]
      1 => array:19 [
        "id" => 3
        "course_id" => 18
      ]                                   
    ]
    array:2 [
      0 => array:19 [
        "id" => 5
        "course_id" => 1
      ]                                
      1 => array:19 [
        "id" => 6
        "course_id" => 1
      ]
    ]
    array:2 [
      0 => array:19 [
        "id" => 5
        "course_id" => 1
      ]                                 
      1 => array:19 [
        "id" => 6
        "course_id" => 1
      ]
    ]

dump($m) 显示以下结果:

array:2 [
  0 => 2
  1 => 3
]
array:2 [
  0 => 2
  1 => 3
]
array:2 [
  0 => 6
  1 => 5
]
array:2 [
  0 => 6
  1 => 5
]

下面的图片是查询MyCourse::where('course_id', $key['courseId'])->get()的结果。

[enter image description here]1

[enter image description here]2

[enter image description here]3

预期结果:

dump($m) 应该显示以下结果

[0=>2,
1=>3,
2=>5,
3=>6]

【问题讨论】:

  • 你能把 MyCourse::where('course_id', $key['courseId'])->get() 这个查询的结果转储吗
  • dump$courseCat 没有意义
  • @AmalSR 我做到了。它也导致了我在dump($courseCat);的问题中显示的相同
  • @lagbox 我还应该在这里展示什么?
  • 数据库结果的实际转储......如果这是正确的查询,您将不会有这样的分组或重复项

标签: php arrays laravel eloquent laravel-8


【解决方案1】:

我认为这是因为您有一个未在问题中显示的外循环。你需要在外循环之前声明$m

$m=[];

foreach($keys as $key){
    
    $courseCat = MyCourse::where('course_id', $key['courseId'])->get()->toArray();
    foreach($courseCat as $k=>$c){
      
        if(!in_array($c['id'],$m)){
               array_push($m,$c['id']);
          }
    }
    
}
dump($m);

【讨论】:

  • @user17699125 dump($m); 需要放在外循环之后
  • @user17699125 我的意思是dump($m);。目前你把它放在循环里面,所以dump函数执行了4次。请看我在dump($m); 所在位置的回答。
【解决方案2】:

如果您想要查询中某一列的所有值,您可以使用pluck

MyCourse::where('course_id', $key['courseId'])->pluck('id')

现在您有了所有 'id' 的列表。

Laravel 8.x Docs - Database - Running Database Queries - Retrieving a List of Column Valuespluck

【讨论】:

  • 是的。我可以这样拔身份证。我的问题不是那个。我的问题是 $m 数组以某种方式被清空了&所以,所有 id 都通过打破我的检查插入到 $m 数组中。
  • 你一直在引用这个$m,因为你已经有一个 id 列表......你的代码与输出或你所说的内容不匹配
猜你喜欢
  • 2020-08-03
  • 2016-05-10
  • 2015-06-14
  • 1970-01-01
  • 2012-07-29
  • 2017-11-05
  • 1970-01-01
相关资源
最近更新 更多