假设我需要在下面返回的数组中更新其中一个[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
)
)
答案 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');