【问题标题】:php array undefined indexphp数组未定义索引
【发布时间】:2015-12-15 22:47:32
【问题描述】:

我搜索了谷歌和堆栈溢出论坛,他们反复说使用 isset() 来确保索引已定义,但其中很少有人告诉我如果未设置索引该怎么办。

这是我的简单代码:

<?php
    $allStaff = $this->registry->getData('staff');
    $departments = array();
    foreach($allStaff as $staff){
        if(isset($departments[$staff['department']])){
            $departments[$staff['department']][count($departments[$staff['department']])] = $staff;
        }
        else {
            $departments[$staff['department']][count($departments[$staff['department']])] = $staff;
        }

索引系统的一个例子是:$departments['Management'][0]['name/staff position/etc']

当我查看其他用户的一些答案时,我尝试输入 $departments[$staff['department']] = 0,但它不起作用并且给了我更多错误。请帮忙,谢谢

【问题讨论】:

  • 我不明白为什么你在 if/else 语句中有相同的行。我不确定我是否理解你的目的
  • 再次 ?向我们展示您的确切错误消息

标签: php arrays multidimensional-array indexing


【解决方案1】:

它会给你带来问题的地方在这里:

count($departments[$staff['department']])

所以你要确保它分配了兼容的东西,然后你可以使用它:

if (!isset($departments[$staff['department']]))
    $departments[$staff['department']] = array();

$departments[$staff['department']][count($departments[$staff['department']])] = $staff;

默认情况下,PHP 会为您处理顺序数字索引,因此您可以将上述简化为(感谢 BNC 的启发):

if (!isset($departments[$staff['department']]))
    $departments[$staff['department']] = array();

$departments[$staff['department']][] = $staff;

请注意,您的代码具有P[Q[i]][j] = Q 之类的模式,可以正常工作,只是不经常看到。

【讨论】:

    【解决方案2】:

    目前尚不清楚您要在这里做什么。我的猜测是你想计算每个部门有多少员工。如果我的猜测是错误的,请用英语(不是代码)说明你的目标。如果我的猜测是正确的,...

    $allStaff = $this->registry->getData('staff');
    $departments = array();
    foreach($allStaff as $staff){
        if( !isset($departments[$staff['department']]) ) {
            $departments[$staff['department']] = 0;
        }
        $departments[$staff['department']] += 1;
    }
    

    更新:等等,我想我刚刚弄明白了(当 [] 足以附加到数组时,我被 count() 的使用误导了)。我现在猜你想要按部门分组的员工,...

    $allStaff = $this->registry->getData('staff');
    $departments = array();
    foreach($allStaff as $staff){
        if( !isset($departments[$staff['department']]) ) {
            $departments[$staff['department']] = array();
        }
        $departments[$staff['department']][] = $staff;
    }
    

    【讨论】:

      猜你喜欢
      • 2011-08-15
      • 2013-11-03
      • 1970-01-01
      • 2012-12-08
      • 1970-01-01
      • 1970-01-01
      • 2015-12-05
      • 2012-06-01
      • 2013-10-18
      相关资源
      最近更新 更多