我想知道是否可以编辑foreach循环中正在处理的当前对象
我正在使用一组对象$questions,我想通过查找与我的数据库中的问题对象相关的答案.因此,对于每个问题,请获取答案对象并更新我的循环中的当前$question 内容,foreach以便我可以在其他地方输出/处理.
foreach($questions as $question){
$question['answers'] = $answers_model->get_answers_by_question_id($question['question_id']);
}
Run Code Online (Sandbox Code Playgroud) 我想在数组中的所有项目中进行字符串替换.我有的是:
$row['c1'] = str_replace("&", "&", $row['c1']);
$row['c2'] = str_replace("&", "&", $row['c2']);
$row['c3'] = str_replace("&", "&", $row['c3']);
$row['c4'] = str_replace("&", "&", $row['c4']);
$row['c5'] = str_replace("&", "&", $row['c5']);
$row['c6'] = str_replace("&", "&", $row['c6']);
$row['c7'] = str_replace("&", "&", $row['c7']);
$row['c8'] = str_replace("&", "&", $row['c8']);
$row['c9'] = str_replace("&", "&", $row['c9']);
$row['c10'] = str_replace("&", "&", $row['c10']);
Run Code Online (Sandbox Code Playgroud)
如何用更少的代码实现这一目标?我认为foreach声明可行,例如:
$columns = array($row['c1'], $row['c2'], $row['c3'], $row['c4'], $row['c5'], $row['c6'], $row['c7'], $row['c8'], $row['c9'], $row['c10']);
foreach ( $columns as $value){
$value = str_replace("&", "&", $value);
}
Run Code Online (Sandbox Code Playgroud)
但它不起作用.
我正在尝试对阵列中的数据执行清理工作,特别是将纪元时间转换为YYYY-MM-DD.
我最初尝试过这个功能:
foreach ($data as $row) {
$row['eventdate'] = date('Y-m-d', $row['eventdate']);
}
echo '<pre>';
print_r($data);
echo '</pre>';
Run Code Online (Sandbox Code Playgroud)
但是,当我输出数据时,foreach循环没有更新数据.
以下for循环确实有效:
for ($i=0; $i<count($data); $i++) {
$data[$i]['eventdate'] = date('Y-m-d', $data[$i]['eventdate']);
}
Run Code Online (Sandbox Code Playgroud)
为什么第一个循环失败而第二个循环失败?他们不一样吗?
如果如下所示的PHP程序存储在bug.php中,那么这个命令
php bug.php
Run Code Online (Sandbox Code Playgroud)
使用 PHP 7.0.33-0ubuntu0.16.04.1 (cli) ( NTS ) Zend Engine v3.0.0,版权所有 (c) 1998-2017 Zend Technologies 和 Zend OPcache v7.0.33-0ubuntu0.16.04.1 时将生成此输出,版权所有 (c) 1999-2017,Zend Technologies
输出:
Initial array
Array
(
[0] => aa
[1] => bb
)
j = 0 line = aa
element 0 is aa
j = 1 line = bb <----------------------------------------------
element 1 is ***bb <----------------------------------------------
Final array
Array
(
[0] => aa
[1] => ***bb
)
Run Code Online (Sandbox Code Playgroud)
注意上面标记的线。元素 $A[1] 是“***bb”,而 $line(foreach 应与键 1 关联)是“bb”。
这是一个错误,还是有一些我不知道的 PHP 微妙之处? …
如果我有这样的数组:
array(2) {
[0]=>
array(2) {
["id"]=>
string(2) "34"
["total"]=>
string(6) "122337"
},
[1]=>
array(2) {
["id"]=>
string(2) "43"
["total"]=>
string(6) "232337"
}
}
Run Code Online (Sandbox Code Playgroud)
我想为每个子数组添加一个新的键值,例如,它会像这样结束:
array(2) {
[0]=>
array(2) {
["id"]=>
string(2) "34"
["total"]=>
string(6) "122337"
["newkey"]=>
string(6) "hihihi"
},
[1]=>
array(2) {
["id"]=>
string(2) "43"
["total"]=>
string(6) "232337"
["newkey"]=>
string(6) "hihihi"
}
}
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我试过像这样的foreach:
foreach($exterior_array as $inside_array) {
$inside_array['newkey'] = "hihihi";
}
Run Code Online (Sandbox Code Playgroud)
但是一旦进入foreach,值就不会被保存.
如果你有一个类似下面的foreach循环,我知道你可以通过改变数组的当前元素$array[$key],但是还有一种方法可以改变它$value吗?
foreach($array as $key => $value){
}
Run Code Online (Sandbox Code Playgroud)
它可能非常简单,但我对PHP很新,所以请不要被我的问题烦恼:)
可能的重复:
如何通过 foreach 循环修改数组的值?
为什么这不起作用?
$user_list_array = array(
1 => array( "first_name" => "Jim" ),
2 => array( "first_name" => "Bob" )
)
foreach ($user_list_array as $item ) {
echo $item["first_name"];
$item["last_name"] = "test";
}
var_dump($user_list_array );
Run Code Online (Sandbox Code Playgroud)
我可以取回“first_name”,但不能添加“last_name”;
im quite new to php and as i was looking for info for last 2 hours, no examples seemed to help. i have what i think is called nested array? two of them. pretty much i need to be able to match id from different arrays. and detract the amount from stock.
<?php
$items = array(
array('id' => 34, 'name' => 'Kompiuterius ASUS ASX89', 'price' => 639.00, 'stock' => 3),
array('id' => 1008, 'name' => 'Monitorius AOC 27IPS', 'price' => …Run Code Online (Sandbox Code Playgroud) 我正在尝试在数组中添加一个字段并返回它,但据说var_dump,没有对数组进行任何更改.执行if块中的指令,数据似乎正确.
function addLength($toAdd, $added){
$result = $toAdd;
foreach ($result as $row) {
foreach ($added as $key => $value) {
if($key == $row['id'] ){
$row['length'] = $value;
}
}
}
var_dump($result);
return $result;
}
Run Code Online (Sandbox Code Playgroud)