功能目录:

1.二维数组排序(类似数据库排序)
2.商品规格组合方式

1.二维数组排序(类似数据库排序)

方法一 : usort — 使用用户自定义的比较函数对数组中的值进行排序
// 实现了根据二维数组的某个列进行排序
$array[0] = array('key_a' => 'z', 'key_b' => 'c');
$array[1] = array('key_a' => 'x', 'key_b' => 'b');
$array[2] = array('key_a' => 'y', 'key_b' => 'a');

function build_sorter($key){
   return function ($a, $b) use ($key) {
      return strnatcmp($a[$key], $b[$key]);
   };
}

usort($array, build_sorter('key_b'));
print_r($array);
foreach ($array as $item) {
   echo $item['key_a'] . ', ' . $item['key_b'] . "\n";
}
// 结果
Array
(
    [0] => Array
        (
            [key_a] => y
            [key_b] => a
        )

    [1] => Array
        (
            [key_a] => x
            [key_b] => b
        )

    [2] => Array
        (
            [key_a] => z
            [key_b] => c
        )

)
y, a
x, b
z, c
方法二 : array_multisort — 对多个数组或多维数组进行排序
// 示例3-对数据库结果进行排序
$data[] = array('volume' => 67, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 1);
$data[] = array('volume' => 85, 'edition' => 6);
$data[] = array('volume' => 98, 'edition' => 2);
$data[] = array('volume' => 86, 'edition' => 6);
$data[] = array('volume' => 67, 'edition' => 7);

// 取得列的列表
$volume = [];
$edition = [];
foreach ($data as $key => $row) {
     $volume[$key] = $row['volume'];
     $edition[$key] = $row['edition'];
}

// 将数据根据 volume 降序排列,根据 edition 升序排列
// 把 $data 作为最后一个参数,以通用键排序
array_multisort($volume, SORT_DESC, $edition, SORT_ASC, $data);
print_r($data);
// 结果
Array
(
    [0] => Array
        (
            [volume] => 98
            [edition] => 2
        )

    [1] => Array
        (
            [volume] => 86
            [edition] => 1
        )

    [2] => Array
        (
            [volume] => 86
            [edition] => 6
        )

    [3] => Array
        (
            [volume] => 85
            [edition] => 6
        )

    [4] => Array
        (
            [volume] => 67
            [edition] => 2
        )

    [5] => Array
        (
            [volume] => 67
            [edition] => 7
        )

)

2.商品规格组合方式

方法一 : array_reduce — 用回调函数迭代地将数组简化为单一的值
// 组合方式
$arr = [
   ['红', '黄', '蓝'],
   ['大', '中', '小']
];
$str = ';';
$result = array_reduce($arr, function ($v, $m) use ($str) {
     $temp = [];
     foreach ($v as $vv) {
          foreach ($m as $mm) {
               if (empty($vv)) {
                    $temp[] = $mm;
               else {
                    $temp[] = $vv . $str . $mm;
               }
          }
     }
     return $temp;
}, ['']);
print_r($result);
// 结果
Array
(
    [0] => 红;大
    [1] => 红;中
    [2] => 红;小
    [3] => 黄;大
    [4] => 黄;中
    [5] => 黄;小
    [6] => 蓝;大
    [7] => 蓝;中
    [8] => 蓝;小
)

results matching ""

    No results matching ""