2017-02-09 68 views
0

我有数组列表:如何截断太长的字符串值?

$myarray = array(
    array(
     'name' => 'File name 1 - type.zip', 
     'size' => '600KB', 
    ), 
    array(
     'name' => 'File name 2 - type.pdf', 
     'size' => '1.5MB', 
    ), 
    array(
     'name' => 'File name 3 - type.jpeg', 
     'size' => '50.5KB', 
    ), 
); 

。 。 。并且需要截断文件名,但保留文件的扩展名和大小。

因此,例如'File name 1 - type.zip'应显示为'File name 1 - ... .zip (600KB)'

任何提示?

+0

只是做字符串子字符串和抢最后25个字符或无论你想要多少。 – Dimi

+1

欢迎来到Stack Overflow!我更新了你的问题和标题,以使它与你想要做的更接近的事情相匹配,这将使你更有可能得到可以帮助你和其他人的答案。如果您认为我错误地表达了您的问题,请随时澄清。祝你好运! – talemyn

回答

0

您可以使用pathinfo将名称与扩展名分开。然后有各种方法来缩短和添加省略号。从this answer的方法是非常简单的。您可以将此方法映射到您的数组以格式化所有项目。

$max = 11; 

$formatted = array_map(function($file) use ($max) { 
    $info = pathinfo($file['name']); 
    $name = $info['filename']; 
    $name = strlen($name) > $max ? substr($name, 0, $max) . '...' : $name; 
    return "$name$info[extension] $file[size]"; 
}, $myarray); 
0

你可以使用爆炸和SUBSTR 假设你len_you_neen是6焦炭

$tmpArray = explode('.',$myArray['name']); 
$myStr = substr($tmpArray[0], 0, 6); 

$resultStr = $myStr . '.'.$tmpArray[1]; 
0

你可以给像下面一试。它不包括文件大小,但我相信你可以从那里拿走它。

$fileName = "File name 1 - type.zip"; 
echo shortenFileNameWhileMaintainingExtension($fileName); 

function shortenFileNameWhileMaintainingExtension($fileName, $shortenToLength = 20) { 
    $extension = substr(strrchr($fileName, '.'), 1); 
    if((strlen($fileName) - strlen($extension)) < $shortenToLength) { 
     return $fileName; 
    } 
    $newFileName = trim(substr($fileName, 0, $shortenToLength)) . "...." . $extension; 
    return $newFileName; 
}