2012-12-06 148 views
0

比方说,我需要通过一个数组运行一个for循环,我需要检查键值。我想打印与不匹配的元素之前不匹配的数组元素。如何基于两个键值对数组键进行排序?

因此,使用下面的数组(为了清晰起见添加额外的值),我想打印如下。它需要匹配current_taglast_tag值。如果它们不匹配,则需要在其他之前打印该关键字。

期望的结果

TEST2 

TEST1 
TEST3 
TEST4 

阵列

array(2) { 
    [0]=> 
    array(3) { 
     ["name"]=> 
      string(3) "TEST1" 
     ["current_tag"]=> 
      string(13) "20121129_TEST1" 
     ["last_tag"]=> 
      string(13) "20121129_TEST1" 
    } 
    [1]=> 
    array(3) { 
     ["name"]=> 
      string(3) "TEST2" 
     ["current_tag"]=> 
      string(13) "20121205_TEST2" 
     ["last_tag"]=> 
      string(13) "20121129_TEST2" 
    } 
    ... 
    ... 
    ... 
    ... 
} 

回答

1

我会usort阵列与一个自定义的回调对数组进行排序。分类后,您可以打印每个name密钥。

usort($array, function($a, $b) { 
    $match_a = $a['current_tag'] == $a['last_tag']; 
    $match_b = $b['current_tag'] == $b['last_tag']; 

    if ($match_a && $match_b) { 
     return 0; 
    } elseif ($match_a && !$match_b) { 
     return 1; 
    } elseif (!$match_a && $match_b) { 
     return -1; 
    } 
}); 

array_walk($array, function($item) { 
    echo $item['name']; 
}); 

如果以错误的顺序排序,只需切换1和-1返回值。

+0

完美的作品谢谢你。 – luckytaxi

+0

只是想到了一些事情,虽然这是有效的,但我需要一种方法来“分离”它们。所以,它应该打印出与先不匹配的值,然后再打破以区分其他数组值。看我上面的例子。 – luckytaxi

相关问题