使用unset从php中的数组中删除值

使用unset从php中的数组中删除值,php,Php,我有一系列的问题作业和一系列的问题。我想通过迭代已分配的问题并从问题数组中删除这些问题的id,从问题数组中删除已分配的问题 这将给我留下一系列未分配的问题 e、 g 分配的问题1,2,3,4,5 问题1,2,3,4,5,6,7,8,9,10 应该离开 问题6,7,8,9,10 所以我的作业数组包含一个调查_questions _id,所以我正在做一个foreach,并在questions数组中取消问题的id,但我没有得到一个数组,其中分配的问题被删除 public function re

我有一系列的问题作业和一系列的问题。我想通过迭代已分配的问题并从问题数组中删除这些问题的id,从问题数组中删除已分配的问题

这将给我留下一系列未分配的问题

e、 g

分配的问题1,2,3,4,5

问题1,2,3,4,5,6,7,8,9,10

应该离开

问题6,7,8,9,10

所以我的作业数组包含一个调查_questions _id,所以我正在做一个foreach,并在questions数组中取消问题的id,但我没有得到一个数组,其中分配的问题被删除

    public function remove_assigned_questions($questions, $survey_id) {

        $assignments = $this->db->rs( T_SURVEY_QUESTION_ASSIGNMENTS, NULL, (T_SURVEYS . TC_ID_SUFFIX .'=' . $survey_id) );


        foreach($assignments as $assignment) {

           unset($questions[$assignment[T_SURVEY_QUESTIONS . TC_ID_SUFFIX]]);


        }

        return $questions;

    }
我的问题数组是这样的

array(3) {
  [0]=>
  array(5) {
    ["id"]=>
    string(1) "1"
    ["survey_question"]=>
    string(13) "Some question"
    ["survey_question_types_id"]=>
    string(1) "1"
    ["required"]=>
    string(1) "1"
    ["status"]=>
    string(1) "1"
  }
  [1]=>
  array(5) {
    ["id"]=>
    string(1) "2"
    ["survey_question"]=>
    string(17) "One more question"
    ["survey_question_types_id"]=>
    string(1) "2"
    ["required"]=>
    string(1) "1"
    ["status"]=>
    string(1) "1"
  }
  [2]=>
  array(5) {
    ["id"]=>
    string(1) "3"
    ["survey_question"]=>
    string(21) "Just another question"
    ["survey_question_types_id"]=>
    string(1) "1"
    ["required"]=>
    string(1) "1"
    ["status"]=>
    string(1) "1"
  }
}
你知道为什么它不删除作业中的问题吗[t\u SURVEY\u questions.TC\u ID\u后缀]

下面是作业的值,然后是作业的foreach循环值[T\u SURVEY\u QUESTIONS.TC\u ID\u SUFFIX]

array(2) {
  [0]=>
  array(3) {
    ["id"]=>
    string(1) "1"
    ["surveys_id"]=>
    string(1) "3"
    ["survey_questions_id"]=>
    string(1) "1"
  }
  [1]=>
  array(3) {
    ["id"]=>
    string(1) "2"
    ["surveys_id"]=>
    string(1) "3"
    ["survey_questions_id"]=>
    string(1) "2"
  }
}
string(1) "1"
string(1) "2"
当程序运行时,它似乎删除了ID为2和3的问题,而留给我的是1

array(1) {
  [0]=>
  array(5) {
    ["id"]=>
    string(1) "1"
    ["survey_question"]=>
    string(13) "Some question"
    ["survey_question_types_id"]=>
    string(1) "1"
    ["required"]=>
    string(1) "1"
    ["status"]=>
    string(1) "1"
  }
}

这是不正确的,因为分配了1

我之所以使用它,是因为@deceze指出了我的错误,我需要在带有分配的问题id值的问题中找到问题数组的键,然后删除该数组键

public function remove_assigned_questions($questions, $survey_id) {

    $assignments = $this->db->rs( T_SURVEY_QUESTION_ASSIGNMENTS, NULL, (T_SURVEYS . TC_ID_SUFFIX . '=' . $survey_id) );
    $ids = array_column($questions, TC_ID);

    foreach($assignments as $assignment) {

        if( $key = array_search( $assignment[T_SURVEY_QUESTIONS . TC_ID_SUFFIX], $ids ) );
        unset($questions[$key]);

    }

    return $questions;

}

分类

我们需要$assignments、T_SURVEY_QUESTIONS和TC_ID_SUFFIX的值才能说出任何事情…只是添加了一些您正在测试remove_assignment_QUESTIONS的返回值的值,或者您希望$questions输入参数被修改到位吗?我希望$questions将通过删除分配的问题返回,并删除分配的问题的id。您知道您正在取消数组偏移,而不是通过id取消问题?!