数组获取具有相似值的键

时间:2013-12-11 04:39:28

标签: php arrays

这是我的阵列:

Array
(
    [F] => 09:00 - 18:00
    [M] => 09:00 - 18:00
    [Th] => 09:00 - 18:00
    [W] => 09:00 - 18:00
    [T] => 09:00 - 18:00
    [Su] => RD
    [Sa] => RD
)

我希望产生这个输出:

MTWThF 9:00 - 18:00 SaSu RD

这是我的代码:

array_s=array(
        F => 09:00 - 18:00
        M => 09:00 - 18:00
        Th => 09:00 - 18:00
        W => 09:00 - 18:00
        T => 09:00 - 18:00
        Su => RD
        Sa => RD
)

  asort($array_s);
  $temp_s = '';
  foreach($array_s as $key => $value){
    if($temp_s == null){
      $temp_s = $value; //first array
      $temp_day = $key;
      $res_day .= $temp_day;
    }else{
      if($value == $temp_s){
        $res_day .= $key;
      }else{
      echo $res_day ." ". $temp_s;
        $res_day = null;
        $temp_s = $value;
        $temp_day = $key;
        $res_day .= $temp_day;
      }
    }

但输出是这样的:

FMThWT 09:00 - 18:00 可能是我做错了但我不知道如何修复错误。感谢

2 个答案:

答案 0 :(得分:1)

有很多方法可以做这样的事情。这是一个例子:

foreach(array_values($array_s) as $value) {
    foreach($array_s as $key => $current) {
        if($value != $current)
            continue;
        if(!array_key_exists($value, $output))
            $output[$value] = array();
        if(!in_array($key, $output[$value]))
            $output[$value][] = $key;
    }
}

This gives you a structured array like this:

Array
(
    [09:00 - 18:00] => Array
        (
            [0] => F
            [1] => M
            [2] => Th
            [3] => W
            [4] => T
        )

    [RD] => Array
        (
            [0] => Su
            [1] => Sa
        )

)

然后,您可以这样输出:

foreach($output as $key => $current) {
    echo implode('', $current) . ' ' . $key . ' ';
}

输出数据的奇怪方式,但这会给你:

FMThWT 09:00 - 18:00 SuSa RD 

...它不是你想要的顺序,但实现该顺序的最佳方法是将其修复到创建数组的位置(因为它显然是与日期相关的事情) - 更难你创造它的那种排序就像它在开始时对它进行排序一样。如果您决定在此处进行排序,have a look at this post and use his example.

输出演示: https://eval.in/78517

  

文档

答案 1 :(得分:0)

foreach 完成后,您需要回显剩下的内容:

array_s=array(
        F => 09:00 - 18:00
        M => 09:00 - 18:00
        Th => 09:00 - 18:00
        W => 09:00 - 18:00
        T => 09:00 - 18:00
        Su => RD
        Sa => RD
)

  asort($array_s);
  $temp_s = '';
  foreach($array_s as $key => $value){
    if($temp_s == null){
      $temp_s = $value; //first array
      $temp_day = $key;
      $res_day .= $temp_day;
    }else{
      if($value == $temp_s){
        $res_day .= $key;
      }else{
      echo $res_day ." ". $temp_s;
        $res_day = null;
        $temp_s = $value;
        $temp_day = $key;
        $res_day .= $temp_day;
      }
    }
  }
  echo $res_day ." ". $temp_s;