Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在PHP5.3中读取数组中最长的字符串_Php_Arrays - Fatal编程技术网

在PHP5.3中读取数组中最长的字符串

在PHP5.3中读取数组中最长的字符串,php,arrays,Php,Arrays,这是代码的一部分 $DatabaseArray=Array("Cooking","look","I cant","Walking the dog to the park","washing","talk","one"); $largest = max($DatabaseArray); echo $largest. "<br /&g

这是代码的一部分

$DatabaseArray=Array("Cooking","look","I cant","Walking the dog to the park","washing","talk","one");
  
$largest = max($DatabaseArray);
  
echo $largest. "<br />";
$DatabaseArray=Array(“烹饪”、“看”、“我不能”、“遛狗去公园”、“洗衣服”、“说话”、“一个”);
$maxist=max($DatabaseArray);
echo是最大的。“
”;
我想在PHP5.3.0中读取数组中最长的字符串。我尝试了max函数,但似乎没有按预期工作

$longestEntry = array_reduce($databaseArray, function ($a, $b) { return strlen($a) > strlen($b) ? $a : $b; });
(使用PHP5.3语法)

不能只使用
max
,因为这假设所有条目都是数字。由于它们是字符串,“最大字符串”可能意味着任何东西,因此您必须使用
strlen
进行手动比较。上面的
array\u reduce
方法使用自定义reduce函数进行比较,并将数组缩减为最长的成员

如果您有很多条目(我的意思是很多,成百上千,甚至更多),那么它可能不是非常有效,因为它基本上对整个数组应用了两次
strlen
。如果这是一个问题,则通过对每个字符串仅应用一次
strlen
来提高效率:

$longestEntry = current(array_reduce($databaseArray, function ($a, $b) {
    $b = array($b, strlen($b));
    return $a[1] > $b[1] ? $a : $b;
}, array(null, 0)));
既然您将其称为
DatabaseArray
,那么:如果这是来自数据库,您应该让它完成工作。它可能会更有效率。例如:

SELECT * FROM `table` ORDER BY CHAR_LENGTH(`string_col`) DESC LIMIT 1

@杰米
array\u reduce
array\u map
真的没有得到充分利用回答得好。有没有可能添加DB示例(MySQL格式,因为它最常与PHP一起使用)以获得一个完整的答案?这段代码返回的是索引,而不是数组中最长的元素。您指的是第3行。最后一行给出了元素本身。谢谢,伙计,我没有注意到,因为我的数据库填充得很满,代码中没有分页符。感谢您的全力支持,它正在工作!!!!
$lengths = array_map('strlen', $DatabaseArray);
$maxLength = max($lengths);
$index = array_search($maxLength, $lengths);
echo $DatabaseArray[$index];