ID: 48492 Comment by: alex at emailclick dot com Reported By: alex at emailclick dot com Status: Feedback Bug Type: Arrays related Operating System: Windows XP PHP Version: 5.2.9 New Comment:
This code can generate the "bug". <?php $dates=array("2009-06-09 16:27:00","2009-06-10 15:04:54"); $machines=array("A","B","C"); $data['udate']=array("2009-06-09 16:27:00","2009-06-09 16:27:00","2009-06-09 16:27:00","2009-06-10 15:04:54","2009-06-10 15:04:54","2009-06-10 15:04:54"); $data['model']=array("A","B","C","A","B","C"); $models=array(); foreach($dates as $date){ foreach($machines as $model){ if(!is_array($models[$model])) $models[$model]=array(); $id=array_intersect( array_keys(array_filter($data['udate'],create_function('$date','return$date=="'.$date.'";'))), array_keys(array_filter($data['model'],create_function('$model','return $model=="'.$model.'";'))) ); var_dump($id);echo '<br />'; } } ?> Previous Comments: ------------------------------------------------------------------------ [2009-06-10 12:51:56] j...@php.net Thank you for this bug report. To properly diagnose the problem, we need a short but complete example script to be able to reproduce this bug ourselves. A proper reproducing script starts with <?php and ends with ?>, is max. 10-20 lines long and does not require any external resources such as databases, etc. If the script requires a database to demonstrate the issue, please make sure it creates all necessary tables, stored procedures etc. Please avoid embedding huge scripts into the report. ------------------------------------------------------------------------ [2009-06-08 08:20:20] alex at emailclick dot com It seems that the problem concerns the second cycle: if there are 3 models instead 2 the array that contains the result switchs its position complying to the time of the cycle, so when we use 3 models the results are consequentially saved in the indexes 0, 1, 2, 0, 1, 2 etc.. ------------------------------------------------------------------------ [2009-06-08 08:02:55] alex at emailclick dot com Description: ------------ There is a strange behaviour when I try to check the intersection between two array (of keys (of filtered by callback arrays)). The result of that operation is saved in an array which contains the value at index 0 when the cycle is odd (1,3,5...). Instead the value will be saved at index 1 when the cycle is pair (2,4,6...). Reproduce code: --------------- foreach($dates as $date){ foreach($machines as $model){ if(!is_array($models[$model])) models[$model]=array(); $id=array_intersect( array_keys(array_filter($data->data['udate'],create_function('$date','return $date=="'.$date.'";'))),array_keys(array_filter($data->data['model'],create_function('$model','return $model=="'.$model.'";')))); var_dump($id);echo '<br />'; } } Expected result: ---------------- array(1) { [0]=> int(0) } array(1) { [0]=> int(1) } array(1) { [0]=> int(2) } array(1) { [0]=> int(3) } Actual result: -------------- array(1) { [0]=> int(0) } array(1) { [1]=> int(1) } array(1) { [0]=> int(2) } array(1) { [1]=> int(3) } ------------------------------------------------------------------------ -- Edit this bug report at http://bugs.php.net/?id=48492&edit=1