ID: 21745
Updated by: [EMAIL PROTECTED]
Reported By: [EMAIL PROTECTED]
-Status: Analyzed
+Status: Bogus
Bug Type: Scripting Engine problem
Operating System: windows95
PHP Version: 4.3.0
New Comment:
Sorry, my assumption wasn't right at all.
The error is because $fruit is not initialised in the global
scope.
Try the following:
<?php
function a(){
global $fruit;
$fruit[0] = 'apple';
$fruit[1] = 'orange';
function aa(){
global $fruit;
(array) $fruit;
echo in_array('apple', $fruit) ? 'ok' : 'fail';
}
function ab(){
global $fruit;
if(in_array('apple', array('apple', 'orange'))){
echo 'ok';
} else {
echo 'fail';
}
}
}
a();
aa();
ab();
?>
Previous Comments:
------------------------------------------------------------------------
[2003-01-19 05:54:40] [EMAIL PROTECTED]
This problem turned out to be a problem of the scripting engine, rather
than of in_array(), that "global" declarations don't work in nested
functions.
------------------------------------------------------------------------
[2003-01-19 05:19:00] [EMAIL PROTECTED]
oops
It might be related that you have functions defined in functions. Can
you try without this?
Derick
------------------------------------------------------------------------
[2003-01-19 05:16:03] [EMAIL PROTECTED]
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php
------------------------------------------------------------------------
[2003-01-19 05:14:29] [EMAIL PROTECTED]
// functions within functions scope
function a(){
$fruit[0] = 'apple';
$fruit[1] = 'orange';
function aa(){
global $fruit;
(array) $fruit;
echo in_array('apple', $fruit) ? 'ok' : 'fail';
}
function ab(){
global $fruit;
if(in_array('apple', array('apple', 'orange'))){
echo 'ok';
} else {
echo 'fail';
}
}
}
a();
aa(); // echo fail and Warning: in_array() [function.in-array]: Wrong
datatype for second argument
ab(); // echo ok
// global scope
$country = array('japan', 'korea');
echo in_array('japan', array('japan', 'korea')) ? 'japan - ok' : 'japan
- fail'; // ok
echo '<br>';
echo in_array('japan', $country) ? 'japan -ok' : 'japan - fail'; // ok
echo '<br>';
// function scope
function t(){
$country = array('Malaysia', 'Singapore');
echo in_array('Malaysia', $country) ? 'Malaysia -ok' : 'Malaysia -
fail';
}
t(); // ok
/*
wondering ? bug : bogus;
looks like in_array() can't function well in
functions within functions scope..
May Allah bless all of us!.
sincerely,
Jimson Chang
*/
------------------------------------------------------------------------
[2003-01-19 04:53:35] [EMAIL PROTECTED]
function a(){
$fruit[0] = 'apple';
$fruit[1] = 'orange';
function aa(){
global $fruit;
(array) $fruit;
echo in_array('apple', $fruit) ? 'ok' : 'fail';
}
function ab(){
global $fruit;
if(in_array('apple', array('apple', 'orange'))){
echo 'ok';
} else {
echo 'fail';
}
}
}
a();
aa(); // echo fail and Warning: in_array() [function.in-array]: Wrong
datatype for second argument
ab(); // echo ok
/*
wondering ? bug : bogus;
May Allah bless all of us!.
sincerely,
Jimson Chang
*/
------------------------------------------------------------------------
--
Edit this bug report at http://bugs.php.net/?id=21745&edit=1