[PHP-users 24392] foreach()でバグでしょうか?

yukiotani @ ics otani @ ics.es.yamanashi.ac.jp
2005年 2月 4日 (金) 20:19:14 JST


皆様はじめまして.大谷と申します.

PHPを用いて開発をしておりますが,以下のような現象に遭遇しましたので
こちらにポストさせていただきます.
以下,現象,ソースコード,エラーを記載します.
同様の現象が出る方,原因の分かる方などいらっしゃれば,ぜひご教授ください.

----------
現象
----------
foreach( )のループ内部で,別の関数を呼んだ際に
その関数内部にあるforeach( )でエラーが出る.

長いのですがソースコードを添付します.
foreach( )内部にさらにforeach( ) があるもの ---> test.php (エラーは出ない)
foreach( )内部で関数を呼びその中にforeach( )があるもの ---> test2.php
(エラーが出る)
に分けて検証を行いました.

----------
ソース1(test.php)
----------
<?php
/* **********************************************************
func test :foreach()
********************************************************** */
function check( $check_word ){
foreach ( $data_fruit as $value ){
$plus_delimiter = sprintf("/%s/", $value);
if ( preg_match($plus_delimiter , $check_word, $matting_word) ){
$replaced_word = preg_replace($plus_delimiter , "", $check_word);
$data[0] = trim( $value );
$data[1] = trim( $replaced_word );
}
}
return $data;
}

$data_fruit = array ( "apple",
"orange",
"banana",
"vine"
);

$data_tasting = array ( "apple sweet-tasting",
"orange rough-tasting",
"banana sweet-tasting",
"vine rough-tasting"
);


foreach ( $data_tasting as $value2 ){
$data = check( $value2 );
echo '<font color="red">Fruit: ' .$data[0] ."</font><br />\n";
echo '<font color="green">Tasting: ' .$data[1] ."</font><br />\n";
}
?>



----------
ソース2(test2.php)
----------
<?php
/* **********************************************************
"not" func test :foreach()
********************************************************** */
$data_fruit = array ( "apple",
"orange",
"banana",
"vine"
);

$data_tasting = array ( "apple sweet-tasting",
"orange rough-tasting",
"banana sweet-tasting",
"vine rough-tasting"
);


foreach ( $data_tasting as $value2 ){
foreach ( $data_fruit as $value ){
$plus_delimiter = sprintf("/%s/", $value);
if ( preg_match($plus_delimiter , $value2, $matting_word) ){
$replaced_word = preg_replace($plus_delimiter , "", $value2);
$data[0] = trim( $value );
$data[1] = trim( $replaced_word );
}
}
echo '<font color="red">Fruit: ' .$data[0] ."</font><br />\n";
echo '<font color="green">Tasting: ' .$data[1] ."</font><br />\n";
}
?>


また,出たエラーも記載します
----------
エラー
----------
*Warning*: Invalid argument supplied for foreach() in
*/home/xxx/test.php* on line *6*
Fruit:
Tasting:

*Warning*: Invalid argument supplied for foreach() in
*/home/xxx/test.php* on line *6*
Fruit:
Tasting:

*Warning*: Invalid argument supplied for foreach() in
*/home/xxx/test.php* on line *6*
Fruit:
Tasting:

*Warning*: Invalid argument supplied for foreach() in
*/home/xxx/test.php* on line *6*
Fruit:
Tasting:

----------
以上現象とソースコード,エラーでした.
ちなみに現象は以下のPHPバージョンで確認しております.

php4.3.10
php4.3.6
php4.3.2

よろしくお願いします.



-- 
***********************************
大谷勇毅(Yuki OTANI)
mail: otani @ ics.es.yamanashi.ac.jp
山梨大学(University of Yamanashi)
電気電子システム工学科 
***********************************



PHP-users メーリングリストの案内