#16071 [Fbk->NoF]: foreach return bogus data on 1 row multi-dim array

From: Date: Wed, 07 Aug 2002 05:00:12 +0000
Subject: #16071 [Fbk->NoF]: foreach return bogus data on 1 row multi-dim array
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-16107@lists.php.net to get a copy of this message
ID: 16071 Updated by: php-bugs@lists.php.net Reported By: ned@wgtech.com -Status: Feedback +Status: No Feedback Bug Type: Arrays related Operating System: Win 2000 PHP Version: 4.1.0 New Comment: No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open". Previous Comments: ------------------------------------------------------------------------ [2002-07-03 21:12:52] eru@php.net Sorry, but the bug system is not the appropriate forum for asking support questions. Your problem does not imply a bug in PHP itself. For a list of more appropriate places to ask for help using PHP, please visit http://www.php.net/support.php Thank you for your interest in PHP. If you still think, that this is a bug, please minimalize your script, so that you can just reproduce the bug and then reopen the report. Please take also into concideration, that the bug might already be fixed in a more current version of PHP. Thank you. ------------------------------------------------------------------------ [2002-03-14 10:49:12] ned@wgtech.com Noticed the errors not in foreach, but in the pass. PHP kills the outer array if theres only one element in it in a pass. Thats still a bug. ------------------------------------------------------------------------ [2002-03-14 10:10:06] ned@wgtech.com I have code that traps all errors in a multidimentional array. The array is structured so each row has a numerical key (ie $errors[] = array('err_code'=>12, 'err_file'=>'happy.php');). You get the idea. For error handling I have a function within a class that will accept an error array and do output based on it. The function is as follows: function pass_err_row($errors, $default_val=NULL, $override_val=NULL) { // Throw errors based on err_file or default if (is_null($default_val)) {$default_val=PATH_TO_ROOT.LOC_ERROR."DEFAULT/errors.php";} if (!is_null($override_val)) { foreach($errors as $error_row) { include($override_val); } } else { foreach($errors as $error_row) { if ($error_row['handle_file']!==FALSE && $error_row['handle_file']!=="") { include($error_row['handle_file']); } else { include($default_val); } } } } This works great as long as the array passed has more than one error (each error being another array) in it. So if $errors[0] and $errors[1] both exist, everything works. Where it gets really wacky is if only $errors[0] exists then the foreach loops results in very strange results. Each error array row in $errors consists of the following 8 indexes: 'err_no', 'err_text', 'err_file', 'err_line', 'system_err', 'handle_file', 'handle_code', 'severity'. What happens is the foreach loops 8 times with $error_row being equal not to the array in $errors[0] but being equal to an value in the sub array. So the first result would be the equivalent of $errors[0]['err_no']'s value. $errors is still an array, so why would the for each instead use the sub array? very weird. ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=16071&edit=1

« previous php.bugs (#16107) next »