$list = array(
[0]=> array(
[name]=>'James'
[group]=>''
)
[1]=> array(
[name]=>'Bobby'
[group]=>''
)
)
我希望更新名为'Bobby'的项目'group'。我正在寻找具有以下两种格式的解决方案。提前感谢您的回复。干杯。渣。
array_push($list, ???)
和
$list[] ??? = someting
答案 0 :(得分:1)
据我所知,没有办法用给定的语法更新你的数组。
我能遇到的唯一类似事情是使用array_walk循环遍历数组... http://www.php.net/manual/en/function.array-walk.php
示例:
array_walk($list, function($val, $key) use(&$list){
if ($val['name'] == 'Bobby') {
// If you'd use $val['group'] here you'd just editing a copy :)
$list[$key]['group'] = "someting";
}
});
编辑:示例使用匿名函数,这是自PHP 5.3以来才可能实现的。文档还提供了使用旧版PHP版本的方法。
答案 1 :(得分:1)
此代码可以帮助您:
$listSize = count($list);
for( $i = 0; $i < $listSize; ++$i ) {
if( $list[$i]['name'] == 'Bobby' ) {
$list[$i]['group'] = 'Hai';
}
}
array_push()
与更新值无关,只是为数组添加了另一个值。
答案 2 :(得分:0)
您无法找到适合这两种格式的解决方案。隐式数组push $var[]
是一个语法结构,你不能发明新的 - 当然不是在PHP中,也不是大多数(所有?)其他语言。
除此之外,您正在做的是不将项目推送到数组。首先,推送项目意味着一个索引数组(你的是关联的),而另一个推动意味着向数组添加一个键(你想要更新的键已经存在)。
您可以编写一个函数来执行此操作,如下所示:
function array_update(&$array, $newData, $where = array(), $strict = FALSE) {
// Check input vars are arrays
if (!is_array($array) || !is_array($newData) || !is_array($where)) return FALSE;
$updated = 0;
foreach ($array as &$item) { // Loop main array
foreach ($where as $key => $val) { // Loop condition array and compare with current item
if (!isset($item[$key]) || (!$strict && $item[$key] != $val) || ($strict && $item[$key] !== $val)) {
continue 2; // if item is not a match, skip to the next one
}
}
// If we get this far, item should be updated
$item = array_merge($item, $newData);
$updated++;
}
return $updated;
}
// Usage
$newData = array(
'group' => '???'
);
$where = array(
'name' => 'Bobby'
);
array_update($list, $newData, $where);
// Input $array and $newData array are required, $where array can be omitted to
// update all items in $array. Supply TRUE to the forth argument to force strict
// typed comparisons when looking for item(s) to update. Multiple keys can be
// supplied in $where to match more than one condition.
// Returns the number of items in the input array that were modified, or FALSE on error.