【问题标题】:PHP sorting array for dropdown with different properties用于具有不同属性的下拉列表的 PHP 排序数组
【发布时间】:2019-09-06 14:21:50
【问题描述】:

我有一个包含文章代码作为 id 和不同属性的数组。

$array = array(
    '1234' => array(
        'color' => 'blue',
        'size' => 's',
        'material' => 'cotton'
    ),
    '1235' => array(
        'color' => 'blue',
        'size' => 'm',
        'material' => 'cotton'
    ),
    '1236' => array(
        'color' => 'red',
        'size' => 's',
        'material' => 'cotton'
    ),
    '1237' => array(
        'color' => 'red',
        'size' => 'm',
        'material' => 'cotton'
    ),
    '1238' => array(
        'color' => 'red',
        'size' => 'l',
        'material' => 'cotton'
    ), 
    '1239' => array(
        'color' => 'black',
        'size' => 's',
        'material' => 'cotton'
    ), 
    '1239' => array(
        'color' => 'green',
        'size' => 'l',
        'material' => 'cotton'
    )
);

现在我想为产品 ID (1236) 的每个属性生成多个下拉列表。 所以应该有一个下拉“颜色”和一个下拉“大小”。 “材料”可以忽略,因为没有区别。

现在我的问题来了: 在“颜色”下拉列表中,应该只出现颜色不同但其他属性相同的文章。我不知道我怎么能做到这一点。 因此,为文章“1236”生成下拉列表的新数组应如下所示:

$result = array(
    'color' => array(
        'blue' => '1234'
        'red' => '1236' // the item itself
        'black' => '1239'
    ),
    'size' => array(
        's' => '1236' // the item itself 
        'm' => '1237'
        'l' => '1238'
    )
);

我可能还有更多属性,例如“宽度”或“样式”等。

【问题讨论】:

  • 您似乎认为您可以给我们一个规范,并期望我们为您编写代码。 专业提示:欢迎初学者,但我们希望您在提出问题之前先解决自己的问题。尽管我们非常愿意帮助您解决您编写的代码的问题,但我们不会为您编写代码。
  • 我明白了。但我已经超过 3 个小时试图用超过 4 个 foreach 来编写代码。但仍然绝对没有进展。我不期待代码,更多的是暗示如何实现这样的事情。
  • 您似乎也遗漏了一些东西,例如为什么m1237 而不是1235?试着写一些算法,你怎么能手动做出来。
  • 我想为文章1236生成新数组。m是1237,因为其他参数应该完全一样('color' = 'red')

标签: php arrays sorting dropdown


【解决方案1】:

我在尝试了几个小时后终于得到了解决方案。 这适用于给定的任何属性。真正帮助我的是 array_diff() 函数。

function getDropdownsByArticle($id,$array){
    foreach($array[$id] as $thisproperty => $thisvalue){
        foreach($array as $articleid => $article){
            $arraydiff = array_diff($article,$array[1236]);
            if((count($arraydiff) == 1 AND array_key_exists($thisproperty,$arraydiff)) OR count($arraydiff) == 0){
                $dropdown[$thisproperty][$article[$thisproperty]] = $articleid;
            }
        }           
    }
    return $dropdown;
}
getDropdownsByArticle('1236',$array);

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 2018-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多