php usort_使用PHP usort()简化复杂数据搜索

这篇博客探讨了在处理信息处理任务时对数据集进行排序的重要性,特别是在需要找到数组中的最小值或最大值时。PHP提供了多种内置排序函数,如min()和max(),但在面对复杂数据结构如多维数组或对象数组时,需要使用usort(),uasort()和uksort()等函数。usort()允许通过回调函数根据数组元素内的子元素进行排序,提供了极大的灵活性。博客还通过实例展示了如何根据不同属性对对象数组进行排序,并讨论了如何在排序时保留数字键的值,以及如何处理自然顺序和不区分大小写的排序问题。
摘要由CSDN通过智能技术生成

php usort

Introduction

介绍

Many of the most common information processing tasks require sorting data sets.  For example, you may want to find the largest or smallest value in a collection.  Or you may want to order the data set in numeric or alphabetical order.  The correct data structure for this kind of work is the array.  Fortunately PHP provides an excellent collection of built-in array sorting functions.  These functions can re-arrange arrays in ascending or descending sequence.  They can preserve or renumber the keys.  They can even sort in "natural order" just like a human being would sort a collection, ignoring case-sensitivity in the data set.  And if everything you need to sort can be expressed in a one-dimensional array, one of the PHP built-in array sorting functions will surely do the trick.

许多最常见的信息处理任务都需要对数据集进行排序。 例如,您可能想在集合中找到最大值或最小值。 或者,您可能想按数字或字母顺序对数据集进行排序。 这类工作的正确数据结构是数组 。 幸运的是,PHP提供了出色的内置数组排序功能集合 。 这些函数可以按升序或降序重新排列数组。 他们可以保留或重新编号密钥。 他们甚至可以按照“自然顺序”进行排序,就像人类对集合进行排序一样,而忽略了数据集中区分大小写的情况。 而且,如果您需要排序的所有内容都可以用一维数组表示,那么PHP内置数组排序函数之一肯定可以解决问题。

Finding the Minimum and Maximum Values in a One-Dimensional Array

If you need to find a single min/max value, PHP has built-in functions to do the work for you.  For this simple task, you do not need to write any code.  Just call the PHP function that suits your needs.  Choose either min() or max().

如果您需要找到一个最小/最大值,PHP具有内置函数可以为您完成工作。 对于此简单任务,您无需编写任何代码。 只需调用适合您需求PHP函数即可。 选择min()max()

But if there are any "interesting" edge cases, you may want to read the man pages carefully.  Because PHP is a loosely typed language, these comparisons are done under rules of type-coercion.  PHP will interpret the values in ways that allows PHP to make a duck-typed comparison.  Which value do you think would be the minimum among these array elements:

但是,如果有任何“有趣的”极端情况,您可能需要仔细阅读手册页。 因为PHP是一种松散类型的语言,所以这些比较是在类型强制的规则下进行的。 PHP将以允许PHP进行鸭式比较的方式来解释值。 您认为哪个值是这些数组元素中的最小值:

$arr = [2, '2', Two];
http://php.net/manual/en/language.types.boolean.php http://php.net/manual/zh/language.types.boolean.php http://php.net/manual/en/language.operators.comparison.php http://php.net/manual/en/language.operators.comparison.php http://php.net/manual/en/types.comparisons.php http://php.net/manual/zh/types.comparisons.php http://php.net/manual/en/language.types.type-juggling.php http://php.net/manual/zh/language.types.type-juggling.php http://php.net/manual/en/language.types.string.php#language.types.string.conversion http://php.net/manual/en/language.types.string.php#language.types.string.conversion

Finding some Minimum and Maximum Values in a One-Dimensional Array

在一维数组中查找

If you need to find more than a single min/max value, you need to sort the array.  You can sort in either ascending or descending order, then you can get a collection of the largest or smallest values with array_slice().  Once you have sorted the array, you can return the array in reverse order (you do not need to sort again) with array_reverse().

如果需要查找多个单个的最小值/最大值,则需要对数组进行排序。 您可以按升序或降序排序,然后可以使用array_slice()获得最大值或最小值的集合。 对数组进行排序后,可以使用array_reverse()以相反的顺序返回数组(无需再次排序

Using Multidimensional Arrays or Arrays of Objects

使用多维数组或对象数组

If you have a complex data structure, perhaps an array consisting of "sub-arrays" or objects, you cannot use the built-in PHP sorting functions.  PHP cannot directly compare an array to another array or an object to another object, so it will be necessary to write some code.  For these kinds of complex sorts, PHP provides the usort() function, and its related functions uasort() and uksort().  PHP usort() works with a callback function to tell PHP which data elements are greater or lesser.

如果您具有复杂的数据结构,也许是由“子数组”或对象组成的数组,则不能使用内置PHP排序功能。 PHP无法直接将一个数组与另一个数组进行比较,或者将一个对象与另一个对象进行比较,因此有必要编写一些代码。 对于这些复杂类型,PHP提供了usort()函数及其相关函数uasort()uksort() 。 PHP usort()与回调函数一起使用,以告诉PHP哪些数据元素更大或更小。

PHP usort() gives us great flexibility to sort a data set on the basis of sub-elements inside the array elements.  These sub-elements can be array values or object properties.  An example helps to clarify how this works.  For this example, I'll use the following data collection.

PHP的usort()为我们提供了极大的灵活性,可以根据数组元素内的子元素对数据集进行排序。 这些子元素可以是数组值或对象属性。 一个示例有助于阐明其工作原理。 对于此示例,我将使用以下数据收集。

<?php
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[0]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[1]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-08'; $obj->rating = '23'; $arr[3]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-09'; $obj->rating = '23'; $arr[4]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-11'; $obj->rating = '23'; $arr[6]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-07'; $obj->rating = '20'; $arr[7]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-10'; $obj->rating = '35'; $arr[10] = $obj;

1. $arr is an array of objects

1.

2. Each of the objects contains two properties, "created" and "rating"

2.每个对象都包含两个属性:“创建”和“评分”

3. The array has numeric keys and some of positions are empty or omitted

3.数组具有数字键,某些位置为空或省略

Practical Application #1

实际应用#1

Sort the array by the "created" property in ascending order. 

按“创建的”属性按升序对数组进行排序。

For this application we will need to write our own usort() callback function that makes reference to the "created" property.  PHP usort() expects the callback function to return a value that is negative, zero, or positive, depending on the result of the comparison it performs.  The usort() callback will return a negative number if the first value is less than the second value, and a positive number if the first value is equal or greater than the second values.  Here is our sample code, showing how to sort by "created."

对于此应用程序,我们将需要编写自己的usort()回调函数,以引用“ created”属性。 PHP usort()希望回调函数返回一个负,零或正的值,这取决于它执行的比较结果。 如果第一个值小于第二个值,则usort()回调将返回一个负数,如果第一个值等于或大于第二个值,则将返回一个正数。 这是我们的示例代码,显示了如何按“已创建”进行排序。

<?php
error_reporting(E_ALL);
echo '<pre>';

// CREATE A TEST DATA SET - AN ARRAY OF OBJECTS
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[0]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[1]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-08'; $obj->rating = '23'; $arr[3]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-09'; $obj->rating = '23'; $arr[4]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-11'; $obj->rating = '23'; $arr[6]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-07'; $obj->rating = '20'; $arr[7]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-10'; $obj->rating = '35'; $arr[10] = $obj;

// A FUNCTION TO COMPARE created PROPERTIES
function sort_created_asc($a, $b)
{
    return ($a->created < $b->created) ? -1 : 1;
}

// SORT BY created PROPERTY
usort($arr, 'sort_created_asc');
echo PHP_EOL . "SORTED BY created: " . PHP_EOL;
print_r($arr);

Practical Application #2

实际应用#2

Sort the array by the "rating" property in ascending order.  Print out the objects with the lowest and highest ratings.

按“ rating”属性以升序对数组进行排序。 打印出额定值最低和最高的对象。

For this application we will need to write another usort() callback function that makes reference to the "rating" property.  PHP usort() expects the callback function to return a value that is negative, zero, or positive, depending on the result of the comparison it performs.  The usort() callback will return a negative number if the first value is less than the second value, and a positive number if the first value is equal or greater than the second values.  Here is our sample code, showing how to sort by "rating" and how to find the objects with the minimum and maximum ratings.  Note the use of current() and end() functions to recover the objects.  We could also have used array_slice() to achieve the same result.

对于此应用程序,我们将需要编写另一个usort()回调函数,该回调函数引用“ rating”属性。 PHP usort()希望回调函数返回一个负,零或正的值,这取决于它执行的比较结果。 如果第一个值小于第二个值,则usort()回调将返回一个负数,如果第一个值等于或大于第二个值,则将返回一个正数。 这是我们的示例代码,显示了如何通过“评级”进行排序以及如何查找具有最小和最大评级的对象。 请注意使用current()end()函数来恢复对象。 我们还可以使用array_slice()获得相同的结果。

<?php
error_reporting(E_ALL);
echo '<pre>';

// CREATE A TEST DATA SET - AN ARRAY OF OBJECTS
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[0]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[1]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-08'; $obj->rating = '23'; $arr[3]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-09'; $obj->rating = '23'; $arr[4]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-11'; $obj->rating = '23'; $arr[6]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-07'; $obj->rating = '20'; $arr[7]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-10'; $obj->rating = '35'; $arr[10] = $obj;

// A FUNCTION TO COMPARE rating PROPERTIES
function sort_rating_asc($a, $b)
{
    return ($a->rating < $b->rating) ? -1 : 1;
}

// SORT BY avg_rating
usort($arr, 'sort_rating_asc');
echo PHP_EOL . "SORTED BY rating: " . PHP_EOL;
print_r($arr);

// FIND THE OBJECTS WITH THE LOWEST AND HIGHEST RATINGS
$min = current($arr);
$max = end($arr);
var_dump($min, $max);

Practical Application #3

实际应用#3

Sort the array by the "rating" property, preserving the values of the numeric keys.

通过“ rating”属性对数组进行排序,保留数字键的值。

This is a little more involved, because as written usort() "... assigns new keys to the elements in array. It will remove any existing keys that may have been assigned, rather than just reordering the keys."  If you've been following along, and running the code examples above, you have seen the array keys getting renumbered by the usort() process.  Clearly usort() cannot do the entire job, so we need a strategy to preserve the keys during the sorting process.

这涉及到更多点,因为正如usort()所写,“ ...将新键分配给数组中的元素。它将删除可能已经分配的所有现有键,而不仅仅是重新排列键。” 如果您一直遵循并运行上面的代码示例,则已经看到数组键被usort()进程重新编号。 显然usort()不能完成全部工作,因此我们需要一种在排序过程中保留键的策略。

Our strategy will be to use the complementary function, uasort(), that preserves the array keys (either associative or numeric) during the sort process.

我们的策略是使用互补函数uasort() ,该函数在排序过程中保留数组键(关联键或数字键)。

<?php 
error_reporting(E_ALL);
echo '<pre>';

// CREATE A TEST DATA SET - AN ARRAY OF OBJECTS
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[0]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[1]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-08'; $obj->rating = '23'; $arr[3]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-09'; $obj->rating = '23'; $arr[4]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-11'; $obj->rating = '23'; $arr[6]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-07'; $obj->rating = '20'; $arr[7]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-10'; $obj->rating = '35'; $arr[10] = $obj;

// A FUNCTION TO COMPARE rating PROPERTIES
function sort_rating_asc($a, $b)
{
    return ($a->rating < $b->rating) ? -1 : 1;
}

// SORT AND PRESERVE THE KEYS
uasort($arr, 'sort_rating_asc');

echo PHP_EOL . "WITH KEYS PRESERVED, SORTED BY rating: " . PHP_EOL;
print_r($arr);

Practical Application #4

实际应用#4

Sort the array by any property, with the property name assigned in a variable.

按任何属性对数组进行排序,并在变量中分配属性名称。

This is a bit of a quandary, given the way usort() and its relatives are designed.  The usort() callback uses only two parameters, the comparison values.  And the usort() function itself uses only two parameters, the array and the name of the callback.  There is no place to inject the name of the property we want to use for sorting.  As a result, we have to write one usort() callback for "created" and another nearly identical callback for "rating" and if there were many more properties, we would need many more nearly identical callbacks.  And we could not designate the callback at run time without some spaghetti code -- clearly not an efficient way to write our software!

鉴于usort()及其亲属的设计方式,这有点让人困惑。 usort()回调仅使用两个参数,即比较值。 usort()函数本身仅使用两个参数,即数组和回调的名称。 没有地方可以插入要用于排序的属性的名称。 结果,我们必须为“ created”编写一个usort()回调,为“ rating”编写另一个几乎相同的回调,如果还有更多属性,我们将需要更多几乎相同的回调。 而且,如果没有一些意大利面条代码,我们就无法在运行时指定回调-显然,这不是编写软件的有效方式!

Fortunately PHP 5.3 introduced the concept of anonymous functions and closures.  This makes it possible to inject our sort property name at run time, rather than writing numerous callbacks.  To facilitate this, PHP has "overloaded" the keyword use.

幸运的是,PHP 5.3引入了匿名函数和闭包的概念。 这样就可以在运行时注入我们的sort属性名称,而不用编写大量回调。 为此,PHP已“重载”了关键字

It may represent a namespace declaration, or it may identify the variables that will be inherited from the parent scope into the anonymous function.  It is this latter meaning of use that we exploit in the example below.

它可以表示名称空间声明,也可以标识将从父范围继承到匿名函数中的变量。 我们在下面的示例中利用的是

<?php 
error_reporting(E_ALL);
echo '<pre>';

// CREATE A TEST DATA SET - AN ARRAY OF OBJECTS
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[0]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr[1]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-08'; $obj->rating = '23'; $arr[3]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-09'; $obj->rating = '23'; $arr[4]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-11'; $obj->rating = '23'; $arr[6]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-07'; $obj->rating = '20'; $arr[7]  = $obj;
$obj = new stdClass; $obj->created = '2015-04-10'; $obj->rating = '35'; $arr[10] = $obj;

// A USORT WRAPPER THAT USES A CLOSURE TO INJECT $key INTO THE FUNCTION SCOPE
function sort_by_property(&$items, $key)
{
    return uasort($items, function($a, $b) use ($key){
        return ($a->$key < $b->$key) ? -1 : 1;
    });
}

// WHAT PROPERTY DO WE WANT TO USE FOR THE SORT?
$property = 'rating';

// SORT AND PRESERVE THE KEYS
sort_by_property($arr, $property);

echo PHP_EOL . "WITH KEYS PRESERVED, SORTED BY PROPERTY NAMED $property: " . PHP_EOL;
print_r($arr);

Practical Application #5

实际应用#5

Sort the array by associative key, when the key does not fit a regular sort order.

当键不符合常规排序顺序时,按关联键对数组进行排序。

If the keys are straightforward and fit a natural order, perhaps ISO-8601 datetime values, sorting by keys is easy.  Just call PHP ksort() or krsort() and the built-in functions will do the work for you.  But what if the keys have meaning, but no natural order?  In this case we can use uksort() to provide the answer.  In this example we will translate the English-language name of the number into the corresponding integer value before making the comparison.  As a result we can get our output ordered correctly and still preserve the English-language associative keys.

如果键很简单并且符合自然顺序(也许是ISO-8601日期时间值),则按键排序很容易。 只需调用PHP ksort ()krsort() ,内置函数即可为您完成工作。 但是,如果键有意义但没有自然顺序怎么办? 在这种情况下,我们可以使用uksort()提供答案。 在此示例中,我们将在进行比较之前将数字的英语名称转换为相应的整数值。 结果,我们可以使输出正确排序,并且仍然保留英语关联键。

<?php 
error_reporting(E_ALL);
echo '<pre>';

// CREATE A TEST DATA SET - AN ARRAY OF OBJECTS WITH ASSOCIATIVE KEYS
$obj = new stdClass; $obj->created = '2015-04-09'; $obj->rating = '23'; $arr['four']  = $obj;
$obj = new stdClass; $obj->created = '2015-04-11'; $obj->rating = '23'; $arr['six']   = $obj;
$obj = new stdClass; $obj->created = '2015-04-07'; $obj->rating = '20'; $arr['seven'] = $obj;
$obj = new stdClass; $obj->created = '2015-04-10'; $obj->rating = '35'; $arr['ten']   = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr['zero']  = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr['one']   = $obj;
$obj = new stdClass; $obj->created = '2015-04-08'; $obj->rating = '23'; $arr['three'] = $obj;

// A FUNCTION TO COMPARE STRING KEYS
function sort_string_keys_asc($a, $b)
{
    static $key_translations = array
    ( 'zero'  => 0
    , 'one'   => 1
    , 'two'   => 2
    , 'three' => 3
    , 'four'  => 4
    , 'five'  => 5
    , 'six'   => 6
    , 'seven' => 7
    , 'eight' => 8
    , 'nine'  => 9
    , 'ten'   => 10
    )
    ;
    $a_numeric_key = strtr($a, $key_translations);
    $b_numeric_key = strtr($b, $key_translations);
    return ($a_numeric_key < $b_numeric_key) ? -1 : 1;
}

// SORT BY NUMERIC REPRESENTATION OF THE KEYS
uksort($arr, 'sort_string_keys_asc');

echo PHP_EOL . "SORTED BY NUMERIC TRANSLATION OF ASSOCIATIVE KEY: " . PHP_EOL;
print_r($arr);

Practical Application #6

实际应用#6

Sort the array by associative key, when the key must be treated in a natural order and/or case-insensitive manner.

当必须以自然顺序和/或不区分大小写的方式对待键时,请按关联键对数组进行排序。

This concept may be helpful when dealing with poorly filtered input or unnormalized data.  Such data can appear in systems that do not use case-sensitivity in the file names, or in collections that use number strings of different lengths.  A human being would probably look at "Img_10" and expect it to come after "Img_9" but PHP will not sort those elements in a human-friendly way.  Because PHP comparison functions do not consider fragmentary values or the case-sensitivity of the data, the traditional sorting functions aren't very useful when we're looking for "natural" order.  But PHP has the strnatcasecmp() function to handle this problem.  All we have to do is use it as the callback function in uksort(), like this example. 

当处理过滤不良的输入或未规范化的数据时,此概念可能会有所帮助。 此类数据可以出现在不使用文件名区分大小写的系统中,或使用不同长度数字字符串的集合中。 人类可能会看着“ Img_10”,并期望它出现在“ Img_9”之后,但是PHP不会以人类友好的方式对这些元素进行排序。 因为PHP比较函数不考虑碎片值或数据的区分大小写,所以当我们寻找“自然”顺序时,传统的排序功能不是很有用。 但是PHP具有strnatcasecmp()函数来处理此问题。 我们要做的就是将其用作uksort()中的回调函数,如本例所示。

Note two things tangentially related to this Practical Application.  First, there are other XXXcmp() functions that can be used as usort() callbacks; they are mentioned on the See Also paragraph of the strnatcasecmp() man page.  Second, at the time of this writing (2015) the "natural" order works well for ASCII strings, but as UTF-8 replaces ASCII encoding, it's worth getting a good understanding of character encoding and testing your assumptions about natural order of multi-byte characters.

请注意与该实际应用切线相关的两件事。 首先,还有其他strnatcasecmp()手册页的“另请参见”段落中提到了它们。 其次,在撰写本文时(2015年),“自然”顺序适用于ASCII字符串,但由于UTF-8取代了ASCII编码,因此值得对字符编码有一个很好的了解,并测试您对多字符自然顺序的假设字节字符。

<?php // demo/uksort_case_example.php
error_reporting(E_ALL);
echo '<pre>';

// CREATE A TEST DATA SET - AN ARRAY OF OBJECTS WITH MIXED-CASE ASSOCIATIVE KEYS
$obj = new stdClass; $obj->created = '2015-04-09'; $obj->rating = '23'; $arr['A_100'] = $obj;
$obj = new stdClass; $obj->created = '2015-04-11'; $obj->rating = '23'; $arr['a_99']  = $obj;
$obj = new stdClass; $obj->created = '2015-04-07'; $obj->rating = '20'; $arr['B']     = $obj;
$obj = new stdClass; $obj->created = '2015-04-10'; $obj->rating = '35'; $arr['d']     = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr['ee']    = $obj;
$obj = new stdClass; $obj->created = '2015-04-06'; $obj->rating = '23'; $arr['F*?']   = $obj;
$obj = new stdClass; $obj->created = '2015-04-08'; $obj->rating = '23'; $arr['GGG']   = $obj;

// SORT BY KEYS - CASE-INSENSITIVE
uksort($arr, 'strnatcasecmp');

echo PHP_EOL . "SORTED BY CASE-INSENSITIVE ASSOCIATIVE KEY: " . PHP_EOL;
print_r($arr);

Summary

摘要

This article has shown how to identify minimum and maximum values in data collections, and has shown how to sort arrays of values.  Not only can we sort simple data structures, we can also sort complex data structures.  We can sort a complex array and preserve the keys.   And with the application of anonymous functions, we can get away from the rigid structure of the original PHP usort() design, and create an elegant and generalized solution for the usort() callback.

本文介绍了如何识别数据收集中的最小值和最大值,并展示了如何对值数组进行排序。 我们不仅可以对简单的数据结构进行排序,还可以对复杂的数据结构进行排序。 我们可以对复杂的数组进行排序并保留键。 借助匿名函数的应用,我们可以摆脱原始PHP usort()设计的僵化结构,并为usort()回调创建一个优雅而通用的解决方案。

Please give us your feedback!

请给我们您的反馈意见!

If you found this article helpful, please click the "thumb's up" button below. Doing so lets the E-E community know what is valuable for E-E members and helps provide direction for future articles.  If you have questions or comments, please add them.  Thanks!

如果您发现本文有帮助,请单击下面的“竖起大拇指”按钮。 这样做可以使EE社区了解对EE成员有价值的内容,并为将来的文章提供指导。 如果您有任何问题或意见,请添加。 谢谢!

翻译自: https://www.experts-exchange.com/articles/18319/Using-PHP-usort-to-Simplify-Complex-Data-Search.html

php usort

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值