按内部HTML

时间:2018-04-03 18:01:26

标签: php arrays sorting hyperlink innerhtml

我有一个这样的数组:

array(6) { [0]=> string(116) "A" [1]=> string(112) "C" [2]=> string(110) "B" [3]=> string(115) "F" [4]=> string(113) "D" [5]=> string(112) "E" }

以及哪个字母代表超链接,因此每个字母都是:

<a href="link">Letter</a>

我想对这个数组进行排序,所以我按照它的字母/ innerHTML

进行排序

我想在回声之前对此进行排序。

任何帮助将不胜感激。

谢谢

3 个答案:

答案 0 :(得分:1)

您可以拆分链接并使用letter作为键和完整链接作为值创建新的关联数组。请尝试以下代码。

$links=['<a href="link">D</a>','<a href="link">B</a>','<a href="link">C</a>','<a href="link">A</a>'];
    $new_links=[];
    foreach($links as $link){
        $array_1= explode(">",$link);
        $array_2 = explode("<",$array_1[1]);    
        $new_links[$array_2[0]]=$link;
    }
     ksort($new_links);

答案 1 :(得分:0)

您可usort使用仅比较链接文字的回调。

$link = '/.+>(.+)<.+/';    
usort($array, function($a, $b) use ($link) {
    return preg_replace($link, '\1', $a) <=> preg_replace($link, '\1', $b);
    // If you're on PHP 5 without the <=> operator, you can use strcmp instead
    // return strcmp(preg_replace($link, '\1', $a), preg_replace($link, '\1', $b));
});

我不是正则表达式专家,因此可能有更好的方法来编写模式,但无论如何总体思路都是一样的。众所周知,使用正则表达式解析任意HTML并不是一个好主意,但对于像<a>标签数组这样的东西来说,它看起来非常难以理解。

答案 2 :(得分:0)

我建议使用 strip_tags() 并对结果进行排序,尽管如果您想保留多个链接实例,则需要使用多维数组并对其进行排序:

$unsortedArray = [
  '<a href="/orange">Orange</a>',
  '<a href="/banana2">Banana</a>',
  '<a href="/apple">Apple</a>',
  '<a href="/pineapple">pineapple</a>',
  '<a href="/banana">Banana</a>',
  '<a href="/apple">Apple 2</a>',
];

$sortedArray = [];

function sortLinks($links) {
  $splitArray = [];
  $sortedArray = [];

  foreach($links as $link) {
    $label = strip_tags($link);
    $splitArray[] = ['link' => $link, 'label' => $label];
  }

  usort($splitArray, function ($a, $b) {
    return $a['label'] <=> $b['label'];
  });

  foreach ($splitArray as $item) {
    $sortedArray[] = $item['link'];
  }

  return $sortedArray;
}

$sorted = sortLinks($unsortedArray);

echo '<pre>' . print_r($sorted, 1) . '</pre>';

输出应该是:

Array
(
    [0] => Apple
    [1] => Apple 2
    [2] => Banana
    [3] => Banana
    [4] => Orange
    [5] => pineapple
)