PHP递归问题
PHP recursive issue
您好,我正在尝试在以下数组中查找最长的字符串:
$niza = array( array(5, 1.15 , 15),
array('unknown', 0.75 , 5, array(2, 'bla', 1.15) ),
array(array('text'), 1.15 , 7)
我正在使用以下函数,但没有得到想要的结果,$len
的值保持不变。你能帮帮我吗?
function getLongest($array){
$longest="";
$len=0;
function arrWalk($item){
global $len;
global $longest;
if(is_string($item)) {
echo $len . "<br>";
if (strlen($item) > $len) {
$longest = $item;
$len = strlen($item);
}
}
}
array_walk_recursive($array,'arrWalk');
echo $len;
}
arrWalk($niza);
答案在这里!
function array_flatten($array) {
if (!is_array($array)) {
return FALSE;
}
$result = array();
$i=0;
foreach ($array as $item) {
if (is_array($item)) {
$result = array_merge($result, array_flatten($item));
}
else if(is_string($item)) {
array_push($result,$item);
}
}
return $result;
}
function getLongest($array){
$arr_nivo_1 =array_flatten($array);
$longest="";
$maxLen=0;
foreach ($arr_nivo_1 as $item){
if(strlen($item)>$maxLen){
$maxLen=strlen($item);
$longest=$item;
}
}
return $longest;
}
要从数组中获取最长的字符串元素,您可以使用下面的递归函数。
$niza = array(
array(5, 1.15 , 15),
array(
'unknown', 0.75 , 5,
array(2, 'bla', 1.15)
),
array(array('text'), 1.15 , 7)
);
$longestString = '';
function getLongestString( $param )
{
global $longestString;
if ( is_array($param) )
{
foreach ($param as $val)
{
if ( is_string($val) && strlen($val) > strlen($longestString) )
{
$longestString = $val;
}
else
{
getLongestString( $val );
}
}
}
elseif ( is_string($param) && strlen($param) > strlen($longestString) )
{
$longestString = $param;
}
}
getLongestString( $niza );
print $longestString;
您可以简单地使用以下代码,这将有助于获得您的预期结果
<?php
$niza = array(array(5, 1.15 , 15), array('unknown', 0.75 , 5, array(2, 'bla', 1.15) ), array(array('text'), 1.15 , 7));
$crew = '0'; // assign by default one value that count will be default 1
function getLongest($item, $key)
{
global $crew;
if(strlen($item) >= strlen((string)$crew)){
$crew = $item;
}
}
array_walk_recursive($niza, 'getLongest');
echo $crew;
?>
你应该使用全局变量在递归状态下将最新值存储在变量中
您好,我正在尝试在以下数组中查找最长的字符串:
$niza = array( array(5, 1.15 , 15),
array('unknown', 0.75 , 5, array(2, 'bla', 1.15) ),
array(array('text'), 1.15 , 7)
我正在使用以下函数,但没有得到想要的结果,$len
的值保持不变。你能帮帮我吗?
function getLongest($array){
$longest="";
$len=0;
function arrWalk($item){
global $len;
global $longest;
if(is_string($item)) {
echo $len . "<br>";
if (strlen($item) > $len) {
$longest = $item;
$len = strlen($item);
}
}
}
array_walk_recursive($array,'arrWalk');
echo $len;
}
arrWalk($niza);
答案在这里!
function array_flatten($array) {
if (!is_array($array)) {
return FALSE;
}
$result = array();
$i=0;
foreach ($array as $item) {
if (is_array($item)) {
$result = array_merge($result, array_flatten($item));
}
else if(is_string($item)) {
array_push($result,$item);
}
}
return $result;
}
function getLongest($array){
$arr_nivo_1 =array_flatten($array);
$longest="";
$maxLen=0;
foreach ($arr_nivo_1 as $item){
if(strlen($item)>$maxLen){
$maxLen=strlen($item);
$longest=$item;
}
}
return $longest;
}
要从数组中获取最长的字符串元素,您可以使用下面的递归函数。
$niza = array(
array(5, 1.15 , 15),
array(
'unknown', 0.75 , 5,
array(2, 'bla', 1.15)
),
array(array('text'), 1.15 , 7)
);
$longestString = '';
function getLongestString( $param )
{
global $longestString;
if ( is_array($param) )
{
foreach ($param as $val)
{
if ( is_string($val) && strlen($val) > strlen($longestString) )
{
$longestString = $val;
}
else
{
getLongestString( $val );
}
}
}
elseif ( is_string($param) && strlen($param) > strlen($longestString) )
{
$longestString = $param;
}
}
getLongestString( $niza );
print $longestString;
您可以简单地使用以下代码,这将有助于获得您的预期结果
<?php
$niza = array(array(5, 1.15 , 15), array('unknown', 0.75 , 5, array(2, 'bla', 1.15) ), array(array('text'), 1.15 , 7));
$crew = '0'; // assign by default one value that count will be default 1
function getLongest($item, $key)
{
global $crew;
if(strlen($item) >= strlen((string)$crew)){
$crew = $item;
}
}
array_walk_recursive($niza, 'getLongest');
echo $crew;
?>
你应该使用全局变量在递归状态下将最新值存储在变量中