将数组固定为数字顺序

时间:2012-09-05 20:03:03

标签: php cakephp

我有一个像这样的数组

array
  0 => 
    array
      'title' => string 'Last Name' (length=9)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 1
  1 => 
    array
      'title' => string 'Title 1' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  2 => 
    array
      'title' => string 'Title 10' (length=7)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  3 => 
    array
      'title' => string 'Title 11' (length=7)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  4 => 
    array
       'title' => string 'Title 12' (length=7)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  5 => 
    array
       'title' => string 'Title 2' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  6 => 
    array
        'title' => string 'Title 3' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  7 => 
    array
       'title' => string 'Title 4' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  8 => 
    array
      'title' => string 'Title 5' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  9 => 
    array
      'title' => string 'Title 6' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  10 => 
    array
      'title' => string 'Title 7' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  11 => 
    array
       'title' => string 'Title 8' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0
  12 => 
    array
        'title' => string 'Title 9' (length=6)
      'price' => string '0.0000' (length=6)
      'price_type' => string 'fixed' (length=5)
      'is_required' => int 0

所以问题是在阵列中我有头衔。当我做foreach循环时,标题显示为

LAST NAME:
Title 1:
Title 10:
Title 11:
Title 12:
Title 2:
Title 3:
Title 4:
Title 5:
Title 6:
Title 7:
Title 8:
Title 9:

正如您可以注意到,标题10在1之后显示,而且它的数字顺序不正确。我怎么能在PHP中解决这个问题。 感谢

受审 $ titles = array();                 foreach($ product-> custom_options as $ key => $ row)                 {                     $ titles [$ key] = $ row ['title'];                 }                 var_dump(array_multisort($ titles,SORT_DESC,$ product-> custom_options));

4 个答案:

答案 0 :(得分:2)

尝试将usortstrnatcmp合并。像这样:

usort($array, function($lhs, $rhs){ 
    return strnatcmp($lhs['title'], $rhs['title']);
});

答案 1 :(得分:0)

您永远不会对数组进行排序,因为您以这种方式插入项目,所以它按顺序显示,您首先需要按照字母数字的方式排序数组。尝试使用具有整数值的其他字段。

答案 2 :(得分:0)

问题很可能是生成数组而不是现在修复它。从我看到你有一个标题作为第一个元素,从那时起你有没有正确“排序”的元素。

在不知道确切要求的情况下,根据您发布的内容,“排序”的方法是:

// $data array is the existing array
$new_array = array();
foreach ($data as $item) {
    if ($item['title'] == 'Last Name') {
        $new_array[0] = $item;
    } 
    else
    {
        $key = intval(trim(str_replace("Title ", "", $item['title'])));
        $new_array[$key] = $item;
    }
}

ksort($new_array);

结果数组的元素键为0,标题为“标题XX”,其中XX为数字(取自标题元素

HTH

答案 3 :(得分:0)

您可以直接使用php定义的natsort function,使用“自然顺序”算法对数组进行排序。

只需编写以下代码即可完成。

natsort($array);