从 php 中的变量中分割字符串

问题描述 投票:0回答:3

我目前在分割 PHP 变量中存储的字符串时遇到问题。

我有一个网站和一个 php 脚本,它从数据库字段中获取一个字符串(4-6 个单词,例如雷丁大学),将其存储在变量中并将其显示在屏幕上。它循环数据库并输出许多不同的字符串。

字符串包含大学名称,例如布鲁内尔大学、雷丁大学等 php 脚本按字母顺序显示大学名称。显然它首先读的是“University of...”,因此对许多大学进行了错误的排序。

例如清单:

Brunel University
University of Reading
University of Birmingham
Cardiff University 
University of Essex

目前排序如下:

Brunel University
Cardiff University
University of Birmingham
University of Essex
University of Reading

而它应该排序为:

Birmingham, University of 
Brunel University
Cardiff University 
Essex, University of 
Reading, University of 

我需要在显示每个字符串之前搜索它是否包含“University of”一词,如果包含,我需要删除这些单词并将它们放在字符串的末尾。然后我需要显示该字符串。

我希望这是有道理的,如果有人可以建议我如何做到这一点,我将不胜感激。

编辑

我正在使用的代码如下。我想我可能需要在某个地方使用“爆炸”功能?

<tr>
<td><table class="flat-table flat-table-2" width="100%">
<tr>
</tr>

<tr style="background-color:#FFF;">
<td class="table-head">Name</td>
<td class="table-head">Average Hall Rating</td>
</tr>

<?php
//run a query to find all the fields in the hall table that belong to the specific     university, using the id in the url ($current_id)
if ($s = $db->prepare("SELECT * FROM university ORDER BY name ASC")) { 
    $s->execute(); // Execute the prepared query.

    //search table for all fields and save them in $hall
    $unitemp = $s->fetchAll();
    foreach( $unitemp as $uni) {

    //store each halls id
    $uni_id = "university.php?id=$uni[id]";

    //loop and output hall names below
?>
<tr>
<td><? echo $uni['name'];?></td>
<td><? echo $uni['rating']; }}?></td>
</tr>
</table>
</td>
</tr>
</table> 
php string split
3个回答
2
投票

我更新了代码中的一些行:

     <?php
     //run a query to find all the fields in the hall table that belong to the specific        university, using the id in the url ($current_id)
     if ($s = $db->prepare("SELECT * FROM university ORDER BY name ASC")) { 
         $s->execute(); // Execute the prepared query.

         //search table for all fields and save them in $hall
         $unitemp = $s->fetchAll();
         foreach( $unitemp as $uni) {

             $pieces = explode("of", $uni['name']);

             if(count($pieces)>1)
                 $response = $pieces[1].", ".$pieces[1]." of";
             else
                 $response = $pieces[0]; 

             echo $response;

      }

1
投票

看一眼,您似乎想要创建一个更新的列表,其中大学名称列为

Reading, University
,以
University
开头的大学。您需要循环遍历您的列表,生成一个新的列表来执行此操作。

$universities = $UNIVERSITY_LIST_HERE
$uniNames[];
foreach ($unversities as $uni){
    $uniStr = substr($uni, 0, 12);
    if($uniStr == "University of"){
        // split the string
        $uniNames[] = substr($uni, 13) . ', ' . $uniStr;
    } else {
        $uniNames[] = $uni;
    }
}

然后您可以将

$uniNames
传递到排序算法中。 PHP 有一个很好的
sort();
算法可供您使用。下面,我打印出 foreach 循环内的名称。

sort($uniNames);
foreach ($uniNames as $key => $val) {
    echo "uniNames[" . $key . "] = " . $val . "\n";
}

0
投票

从您的示例数据来看,很明显,您只需要在清理不需要的单词后按名称值排序即可。 您无需费心进行

prepare()
调用,因为您没有向 SQL 查询中注入任何变量。

MySQL 实现:(PHPize 演示)

$sql = <<<SQL
SELECT *
FROM university
ORDER BY REGEXP_REPLACE(name, ' ?University(?: of)? ?', '')
SQL;

foreach ($mysqli->query($sql) as $row) {
    echo "<div>{$row['name']}</div>\n";
}

如果您有兴趣通过 PHP 进行排序(出于某种未知原因),请调用

array_multisort()
并将经过清理的列值的平面数组作为第一个参数传递,以便结果集的行在第二个参数中排序。

代码:(PHPize演示

$result = $mysqli->query('SELECT * FROM university')->fetch_all(MYSQLI_ASSOC);
array_multisort(
    preg_replace('/ ?University(?: of)? ?/', '', array_column($result, 'name')),
    $result
);

foreach ($result as $row) {
    echo "<div>{$row['name']}</div>\n";
}
© www.soinside.com 2019 - 2024. All rights reserved.