,如果他们在个人资料中有替代信息,我需要将新的替代信息合并到循环中. 这是我的循环: foreach ($doctor->getVars() as $k => $v) { $data['doctor_'. $k] = $v; } foreach ($patient->get_data() as $k=>$v) { if (is_string($v) || is_numeric($v)) $data["patient_" . $k] = strtoupper($v); } 这是$ data var_dump: Array ( [employee] => person [date] => 05/08/2013 [datetime] => 05/08/2013 9:41:15 AM [department] => stuff [employee_ext] => 74
以下是关于 foreach 的编程技术问答
当您需要检查/具有数组元素的组合时,如何避免筑巢? 示例代码: $as = array($optionA1, $optionA2) $bs = array($optionB1, $optionB2) $cs = array($optionC1, $optionC2) foreach ($as as $a) { foreach ($bs as $b) { foreach ($cs as $c) { $result = $this->method($a, $b, $c); if ($result) etc } } } 任何可以避免筑巢的替代方法的人? 解决方案 您可以编写自己的迭代类别类,该类实现 iterator "> iterator interface .然后,您可以让其构造函数接受三个阵列,然后可以使用它与foreach的每种组合循环. 但是,我认为这会慢得多,所以我会避免
我有以下代码..而且我知道这可能都是错误的,但是我以前没有处理过foreach循环. $last_names = regapiGetLastNames( NULL, -1 ); foreach ($last_names as $name => $last_name_id) $exclude = array('11196','11195','11198','11197'); if(!in_array($name->last_name_id, $exclude)): print ''.$name.''; 显然在某个地方出错,有任何帮助吗? 解决方案 如果ID是数组值,则可以使用 array_diff 过滤它们: $last_names = regapiGetLastNames( NULL, -1 ); $exclude = array('11196','11
if (isset($errors)) { foreach ($errors as $error) { echo $error; } } else {break 2;} // some more code 输出: Fatal error: Cannot break/continue 2 levels 我尝试了break 1,它也没有用. 解决方案 if (isset($errors)) { foreach ($errors as $error) { echo $error; } } 您似乎不需要在其他条件下结束时使用断裂.只需将上述代码用于错误,如果没有错误,它将跳过.无需休息 其他解决方案 断开foreach内的执行 if (isset($errors)) { foreach ($errors as $error) {
这似乎应该是一个简单的问题,但是我找不到一个好的答案.有没有办法将条件放在foreach循环上?我想要这样的东西: foreach ($array as $value WHILE $condition == true) { //do some code } 当然,我只能在foreach循环中放置一个IF条件: : foreach ($array as $value) { if($condition == true) {//do some code} } 唯一的事情是,我想停止在数组上迭代,以提高性能.无需贯穿foreach循环的其余部分即可确定$条件是错误的. 有什么建议吗?我是否误解了明显的东西? 解决方案 否,但是您可以 break 条件是时的循环大都会: foreach ($array as $value){ if($condition != true) break; } 其他解决方案 您可以在确切的时刻轻
此代码产生意外的输出: $array=str_split("abcde"); foreach($array as &$item) echo $item; echo "\n"; foreach($array as $item) echo $item; 输出: abcde abcdd 如果使用&$item对于第二个循环,一切都很好. 我不明白该代码将如何影响$array的内容.我可以认为隐式unset($header)会删除最后一行,但是双dd来自哪里? 解决方案 这可能会有所帮助: $array=str_split("abcde"); foreach($array as &$item) echo $item; var_dump($array); echo "\n"; foreach($array as $item) { var_dump($array); echo $item; } 您可以在上次迭代之
我是PHP的新手.我有两个数组$array1和$array2相等大小.我一直在使用foreach循环通过这样的数组进行迭代: foreach($array1 as $element1) { //Do stuff with $element1 } 和 foreach($array2 as $element2) { //Do stuff with $element2 } ,但是现在我想同时迭代两个阵列,以便我可以在循环主体中同时访问$element1和$element2. 我该怎么做? 解决方案 while (($element1 = next($array1)) !== false) { $element2 = next($array2); // Do something } ,但是如果false是$array1中允许的值,它将失败.如果(在这种情况下)false在$array2中不允许,则可以同时交换 a" fo
foreach默认情况下,在php7中,当按值迭代时,按照数组的副本按照: http://php.net/manual/en/migration70.compatible.php 它仅在对数组或值进行更改时才会懒惰地创建副本,或者它会始终制作副本,从本质上讲,它会使参考文献进行性能优化? 另外,对象数组是否仍然循环/给您对象的引用?或者他们实际上还会为foreach创建副本并按值返回对象? 解决方案 在php 7中,如果您按值迭代数组,则仅在实际修改数组时懒惰地进行懒惰. . 如果您通过引用迭代数组,则将在循环开始时执行分隔.如果该数组当前在一个以上的位置使用,则此分离将导致副本. 通过参考进行迭代,这意味着a)数组必须包裹在参考中,b)每个元素也必须包裹在参考中.创建参考包装器是一个昂贵的操作,因为它需要分配. 另外迭代的迭代要求我们使用修改安全的迭代机制.这是通过在数组中注册迭代器并在各种数组修改操作中检查潜在受影响的迭代器来起作用的.
我有一个用户列表,需要使用foreach循环迭代并插入DB表中每个新行的表格中. $data['entity_classid'] = $classid; $data['notification_context_id'] = $context_id; $data['entity_id'] = $entity_id; $data['notification_by'] = $userid; $data['actionid'] = $actionid; $data['is_read'] = 0; $data['createdtime'] = time(); foreach($classassocusers as $users){ $data['notification_to'] = $users->userid; $DB->insert_record('homework.comments
每当我"闯入"面孔构造(php/javaScript) 时,我都会感到肮脏 这样的东西: //javascript示例 for (object in objectList) { if (object.test == true) { //do some process on object break; } } 对于大型对象列表,我将通过麻烦建造一个更优雅的解决方案.但是对于小列表,没有明显的性能问题,因此"为什么不呢?"它很快,更重要的是很容易理解和遵循. ,但它只是"感觉不对".有点像goto语句. 您如何处理这种情况? 解决方案 我使用休息时间.这是一个完美的解决方案. 其他解决方案 这很快,更重要的是易于理解和遵循. 不要对休息感到难过. goto被皱眉了,因为它很快,更重要的是不容易理解和遵循. 其他解决方案 请参阅,休息根本不会使我 .编程是构建的在goto上,并且像所有
我试图在foreach循环内飞出一个阵列.我基本上分析了每个键,如果此密钥与我想要的密钥匹配,我想在此之后立即在数组中添加另一个条目. 如果我采用此代码, $values = array( 'foo' => 10, 'bar' => 20, 'baz' => 30 ); foreach($values as $key => $value){ print $value . ' '; if($key == 'bar'){ $values['qux'] = 21; } } 我有2个问题, 首先,输出为10 20 30而不是预期10 20 30 21 第二,即使我解决了第一个问题,我的价值仍然会在我的数组的末端添加 我如何在bar和baz的一个之间添加qux输入? 感谢您的想法. 解决方案 foreach不会在循环内部添加到数组中添加的新值循环. 如果要在两个现有值之间添加新值,则
根据文档的评论: 我们以牺牲时间为代价获得内存使用量的改进 - 那么,为什么PHP发电机比数组慢? 感谢提示. 解决方案 进行多次优化时,您必须在执行速度和内存使用速度(即预先计算某些东西)之间进行选择,或者在需要时进行计算. 发电机允许您编写使用foreach迭代的代码 一组数据无需在内存中构建数组,可能 导致您超过内存限制,或需要大量数量 处理时间生成 手册指的是一种情况,当您无法通过发电机生成的所有结果迭代.速度收益将来自这样一个事实,即您不需要通过生成不需要的项目来浪费时间和内存. 发电机不是为替换数组而设计的.在实现Iterator对象时,它们的目的是减少样板代码的一种方式.发电机总是比数组慢,因为每次调用next(). 时,生成器必须生成值 使用发电机,您可以做一些有趣的事情 - 例如,您可以表示无限序列(例如,您可以创建一个只能接受start和step grigonments的range函数). 我有点好奇,所以我在xrange
我试图在循环中创建这样的数组: $dataPoints = array( array('x' => 4321, 'y' => 2364), array('x' => 3452, 'y' => 4566), array('x' => 1245, 'y' => 3452), array('x' => 700, 'y' => 900), array('x' => 900, 'y' => 700)); 使用此代码 $dataPoints = array(); $brands = array("COCACOLA","DellChannel","ebayfans","google", "microsoft","nikeplus","amazon"); foreach ($brands as $value) { $resp = GetTwitter($value); $dataPoints = array(
在博客文章中内部:何时进行复制" ,Nikic在这样的代码中表示: 摘要1 $array = range(0, 100000); foreach ($array as $key => $value) { xdebug_debug_zval('array'); // array is not copied, only refcount is increased } foreach不会复制数组,因为foreach修改$array的唯一内容是它的内部数组指针. 他还指出,在这样的代码中: 摘要2 $array = range(0, 100000); // line 1 test($array); function test($array) { foreach ($array as $key => $value) { // line 4 xdebug_debug_zval('array'); // array is copied
我想在foreach中的数组中创建一个键值对.这是我到目前为止所拥有的: function createOfferUrlArray($Offer) { $offerArray = array(); foreach ($Offer as $key => $value) { $keyval = array($key => $value[4] ); array_push($offerArray,$keyval); } return $offerArray; } 如果我在foreach中声明数组,它将在每次迭代中覆盖它,但是在foreach之外定义它也不起作用,并且会导致三重态: array[0] => key => value array[1] => key => value 我如何做,所以我只能得到这样的键值对? key => value key => value 解决方案 类似的