Php 我需要按字符串排序,但所考虑的字符串介于两个“之间”/&引用;或介于两者之间-&引用;怎么做

Php 我需要按字符串排序,但所考虑的字符串介于两个“之间”/&引用;或介于两者之间-&引用;怎么做,php,mysql,mysqli,Php,Mysql,Mysqli,表中的当前数据如下所示 XBX/124/18 XX/10/18 XMX/12/18 XX/8/18 XX/123/18 XXX/88/18 XX/68/18 XX/145/18 YYY/5/18 我需要的数据应该是这种格式 XBX/5/18 XX/8/18 XMX/10/18 XX/12/18 XX/68/18 XXX/88/18 XX/123/18 XX/124/18 YYY/145/18 我该怎么做呢?我希望它能帮助你 我假设col2是字符串,数据类似于“XBX/5/18” 这一行将帮助

表中的当前数据如下所示

XBX/124/18
XX/10/18
XMX/12/18
XX/8/18
XX/123/18
XXX/88/18
XX/68/18
XX/145/18
YYY/5/18
我需要的数据应该是这种格式

XBX/5/18
XX/8/18
XMX/10/18
XX/12/18
XX/68/18
XXX/88/18
XX/123/18
XX/124/18
YYY/145/18
我该怎么做呢?

我希望它能帮助你 我假设col2是字符串,数据类似于“XBX/5/18”

这一行将帮助您获得中间号码

SUBSTRING_INDEX(SUBSTRING_INDEX("XBX/5/18", "/", 2),"/",-1);
我希望它能帮助你 我假设col2是字符串,数据类似于“XBX/5/18”

这一行将帮助您获得中间号码

SUBSTRING_INDEX(SUBSTRING_INDEX("XBX/5/18", "/", 2),"/",-1);

查询解决方案是一种很好的方法,如果您能够弄清楚如何做,它可能是首选方法。但是,如果没有更多的信息,下面是一个PHP解决方案,它将为您提供所需的结果

此解决方案考虑“/”或“-”,并将保留排序数组中的“/”或“-”。虽然很难看,但它很管用

$data = array(
  'XBX/124/18',
  'XX/10/18',
  'XMX/12/18',
  'XX/8/18',
  'XX-123-18',
  'XXX/88/18',
  'XX-68-18',
  'XX-145-18',
  'YYY/5/18'
);


for($i = 0; $i < count($data); $i++){

  if(preg_match('/\//', $data[$i])){

    $data[$i] = preg_replace('/\//', ' ', $data[$i]);
    $parsed[$i] = explode(' ', $data[$i]);
    $parsed[$i][3] = '/';

  }elseif(preg_match('/-/', $data[$i])){

    $data[$i] = preg_replace('/-/', ' ', $data[$i]);
    $parsed[$i] = explode(' ', $data[$i]);
    $parsed[$i][3] = '-';

    }

}

$temp = $parsed;

usort($parsed, function($a, $b){  //Will sort by middle and right values.

  if([$a[1], $a[2]] > [$b[1], $b[2]]){

    return 1;

  }elseif([$a[1], $a[2]] < [$b[1], $b[2]]){

    return -1;

    }else{

      return 0;

    }

});

for($i = 0; $i < count($parsed); $i++){ 

  $sorted[] = $temp[$i][0] . $parsed[$i][3] . $parsed[$i][1] . $parsed[$i][3] . $parsed[$i][2];

}

echo '<pre>';
print_r($sorted);
echo '</pre>';

查询解决方案是一种很好的方法,如果您能够弄清楚如何做,它可能是首选方法。但是,如果没有更多的信息,下面是一个PHP解决方案,它将为您提供所需的结果

此解决方案考虑“/”或“-”,并将保留排序数组中的“/”或“-”。虽然很难看,但它很管用

$data = array(
  'XBX/124/18',
  'XX/10/18',
  'XMX/12/18',
  'XX/8/18',
  'XX-123-18',
  'XXX/88/18',
  'XX-68-18',
  'XX-145-18',
  'YYY/5/18'
);


for($i = 0; $i < count($data); $i++){

  if(preg_match('/\//', $data[$i])){

    $data[$i] = preg_replace('/\//', ' ', $data[$i]);
    $parsed[$i] = explode(' ', $data[$i]);
    $parsed[$i][3] = '/';

  }elseif(preg_match('/-/', $data[$i])){

    $data[$i] = preg_replace('/-/', ' ', $data[$i]);
    $parsed[$i] = explode(' ', $data[$i]);
    $parsed[$i][3] = '-';

    }

}

$temp = $parsed;

usort($parsed, function($a, $b){  //Will sort by middle and right values.

  if([$a[1], $a[2]] > [$b[1], $b[2]]){

    return 1;

  }elseif([$a[1], $a[2]] < [$b[1], $b[2]]){

    return -1;

    }else{

      return 0;

    }

});

for($i = 0; $i < count($parsed); $i++){ 

  $sorted[] = $temp[$i][0] . $parsed[$i][3] . $parsed[$i][1] . $parsed[$i][3] . $parsed[$i][2];

}

echo '<pre>';
print_r($sorted);
echo '</pre>';
如上文所述,订购

按转换顺序(子字符串索引(子字符串索引(字段名“/”,2),“/”,-1),无符号整数)

它将以整数形式返回中间值,然后我们可以按上面的顺序对其进行排序

按转换顺序(子字符串索引(子字符串索引(字段名“/”,2),“/”,-1),无符号整数)


它将以整数形式返回中间值,然后我们可以对其进行排序

只需从表中获取数据作为数组,然后使用PHP执行以下步骤对其进行排序


只需从表中获取作为数组的数据,然后使用PHP执行以下步骤对其进行排序



ypu如何获取您的数据?请举例说明你是如何得到它的,以及结果是什么。当mysql显示您的表结构时。ypu如何获取数据的可能重复?请举例说明你是如何得到它的,以及结果是什么。当mysql显示您的表结构时。它的工作可能重复,但返回的字符串不是整数。。。一些额外的代码添加了“CONVERT(SUBSTRING_INDEX(SUBSTRING_INDEX(fieldname,'/',2),'/',1),UNSIGNED INTEGER)”的工作,但它返回的字符串不是整数。。。一些额外的代码添加了“转换(子字符串索引(子字符串索引(字段名“/”,2),“/”,-1),无符号整数)”
<?php
    $arr = ['XBX/124/18', 'XX/10/18', 'XMX/12/18', 'XX/8/18', 'XX/123/18', 'XXX/88/18', 'XX/68/18', 'XX/145/18', 'YYY/5/18'];
    foreach ($arr as $str){
        $matches = substr($str, strpos($str, "/") + 1).'<br>';
        $variable[] = substr($matches, 0, strpos($matches, "/"));    
    }
    natsort($variable);
    $variable_keys = array_keys($variable);
    $ordered_array = array_replace(array_flip($variable_keys), $arr);
    $ordered_array = array_values($ordered_array);
    print_r($ordered_array);
?>