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


PHP function to update array value where part of array matches other part of array?

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

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

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

我正在寻找最有效的方法,可以获取下面的数组,找到与我的[taskid]匹配的数组,将[status]更改为我的新状态值,然后将完整更新的数组返回到一个变量,这样我就可以将其传递回我的数据库。

根据阵列的设置方式,我真的不确定如何做到这一点,如果能提供任何帮助,我将不胜感激?

基于下面的这个数组,我想把这2个变量基本上传递到一个函数中,让函数进行上面提到的更新,并返回整个更新后的数组。。。

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
        )
)

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

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

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

我将global添加到您的代码中,因为否则这将不起作用,但每次都可以避免使用全局。

做这类事情最简单的方法是使用循环。

<?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;
}

你可以这样做:

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

将密钥更改为任务id,然后使用类似的东西

function updateTaskStatus($taskId, $newStatus){
  $tasksArray[$taskId]['status'] = $newStatus;
}
updateTaskStatus(4, 'Completed');