【问题标题】:PHP sorting associative array in object by valuePHP按值对对象中的关联数组进行排序
【发布时间】:2017-05-09 14:51:58
【问题描述】:

我有以下对象:

object(oxVariantSelectList)[18927]
  protected '_sLabel' => string 'Größe' (length=7)
  protected '_iIndex' => int 1
  protected '_aList' => 
    array (size=5)
      '02ce605576fee3181f11ebd2c87baed0' => 
        object(oxSelection)[18965]
          protected '_sName' => string 'Benny' (length=5)
          protected '_sValue' => string '02ce605576fee3181f11ebd2c87baed0' (length=32)
          protected '_blActive' => boolean false
          protected '_blDisabled' => null
      '690645228c86f17648b3a7b1286f1946' => 
        object(oxSelection)[18968]
          protected '_sName' => string 'Arvid' (length=5)
          protected '_sValue' => string '690645228c86f17648b3a7b1286f1946' (length=32)
          protected '_blActive' => boolean false
          protected '_blDisabled' => null
      '972b08df7f6a1a19405f28c1e984b115' => 
        object(oxSelection)[18969]
          protected '_sName' => string 'Chris' (length=5)
          protected '_sValue' => string '972b08df7f6a1a19405f28c1e984b115' (length=32)
          protected '_blActive' => boolean false
          protected '_blDisabled' => null
      '1ba5f38fd6213a22679a4eba30651390' => 
        object(oxSelection)[18970]
          protected '_sName' => string 'Alex' (length=5)
          protected '_sValue' => string '1ba5f38fd6213a22679a4eba30651390' (length=32)
          protected '_blActive' => boolean false
          protected '_blDisabled' => null
      'b0a471b33a911ce8fed459d607f0ffb3' => 
        object(oxSelection)[18985]
          protected '_sName' => string 'Mona' (length=5)
          protected '_sValue' => string 'b0a471b33a911ce8fed459d607f0ffb3' (length=32)
          protected '_blActive' => boolean false
          protected '_blDisabled' => null
  protected '_oActiveSelection' => null

我想按_sName ($obj->getName()) 对数组进行排序。

有什么办法可以通过php实现吗?

eidt:由于一些混淆,我更改了 _sName :)

提前致谢。

【问题讨论】:

标签: php arrays sorting associative-array


【解决方案1】:

您可以使用usort 构建自己的排序功能:

uasort($obj->_aList, function($a, $b) { return strcmp($a->_sName, $b->_sName) });

【讨论】:

  • 是的,我明白了。你是对的。我没有仔细研究过这些值,我只是想演示如何使用usort
  • 我更改了对象值 - 目标是对“字符串”进行排序 - 而不是数字。对不起。但是由于某种原因,已排序对象的 var_dump 看起来与未排序对象完全相同。对于某些原因usort($obj->_aList, function($a, $b) { return strcmp($a->_sName, $b->_sName) }); 不会做这项工作。
  • 检查您是否可以访问您需要的所有字段。我怀疑不是因为它们是protected - 在这种情况下,您需要将$a->_sName 更改为$a->getName(),正如您所提到的,您必须查看是否可以提取数组对其进行排序,然后将其写回。跨度>
  • 我得到一个排序数组,但数组的索引被重新创建。但我需要旧索引(02ce605576fee3181f11ebd2c87baed0)。
  • 那么您只需要使用uasort 而不是usort。答案已编辑。
【解决方案2】:

你可以用usort排序,

usort($array, function($a, $b){return intval($a->_sName) - intval($b->_sName);}

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-29
    相关资源
    最近更新 更多