PHP函数更新数组值,其中数组的一部分匹配数组的其他部分?

时间:2014-09-16 11:18:15

标签: php arrays

假设我需要在下面返回的数组中更新其中一个[status]数组值。

在PHP中,我将把下面返回的数组放到这个变量$taskArray

我唯一要做的就是我需要修改的数组项的[taskid]以及我想要将其更改为[status]的新值。

我正在寻找能够获取下面数组的最有效方法,找到与我的[taskid]匹配的数组,并将[status]更改为我的新状态值,然后将完整更新的数组返回给变量,所以我可以将它传回我的数据库。

我真的不确定如何根据数组的设置方式做到这一点,我很乐意为此提供任何帮助吗?

基于下面这个数组,我想基本将这两个变量传递给一个函数,并让函数进行上面提到的更新并返回整个更新的数组......

function updateTaskStatus($taskId, $newStatus){

    // Contains the Array that is shown below this function
    $tasksArray;

    // Update $tasksArray [status] with the value of $newStatus
    // WHERE $taskId is in the SAME array

    // RETURN UPDATED $tasksArray
    return $tasksArray;

}


// Calling function above would update the [status] to 'completed 
// WHERE [taskid] = 4
updateTaskStatus(4, 'Completed');



Array
(
    [0] => Array
        (
            [taskid] => 3
            [name] => sdgsdfgdfg
            [description] => dfgsdfgsdfg
            [status] => In Progress
            [priority] => Low
            [type] => Magento
        )

    [1] => Array
        (
            [taskid] => 4
            [name] => Dfgyrty
            [description] => rtyrty
            [status] => Open
            [priority] => Urgent
            [type] => Design
        )

    [2] => Array
        (
            [taskid] => 9
            [name] => yrgrtyerty
            [description] => rtyrt6yerty
            [status] => Cancelled
            [priority] => Urgent
            [type] => Magento
        )

    [3] => Array
        (
            [taskid] => 9
            [name] => ertgsdftg
            [description] => dfgsdfg
            [status] => Open
            [priority] => Medium
            [type] => SEO
        )

    [4] => Array
        (
            [taskid] => 30
            [name] => fghdfgh
            [description] => fghdfgh
            [status] => In Progress
            [priority] => Low
            [type] => SEO
        )

    [5] => Array
        (
            [taskid] => 1410858495187
            [name] => tyrty
            [description] => tyrty
            [status] => Open
            [priority] => Low
            [type] => Other
        )

)

4 个答案:

答案 0 :(得分:2)

如果我理解你的问题,那么简单的答案是做一个这样的循环:

function updateTaskStatus($taskId, $newStatus){
    global $tasksArray;
    foreach($tasksArray as $k => $task)
    {
      if ($task['taskid'] == $taskId)
      {
        $tasksArray[$k]['status'] = $newStatus;
        break;
      }
    }
    return $tasksArray;
  }

请注意还有其他解决方案(请参阅包含所有array_ *函数的php文档)。

我在您的代码中添加了global,否则这不起作用,但每次都可以使用global来避免。

答案 1 :(得分:1)

你可以这样做:

foreach ($tasksArray as $task)
    if ($task['taskid'] == $taskId)
        $task['status'] = $newStatus;

答案 2 :(得分:1)

执行此类操作的最简单方法是使用循环。

<?php

function updateTaskStatus($taskId, $newStatus){

    // Loop through all the tasks to see if there's a match
    foreach ($tasksArray as $id => $task) {
        if ($task['taskid'] != $taskId) {
            // Mismatch
            continue;
        }

        $tasksArray[$id]['status'] = $newStatus;
    }

    // RETURN UPDATED $tasksArray
    return $tasksArray;

}

答案 3 :(得分:0)

将密钥更改为任务ID,然后使用类似

的内容
function updateTaskStatus($taskId, $newStatus){
  $tasksArray[$taskId]['status'] = $newStatus;
}

updateTaskStatus(4, 'Completed');