php – 通过参数传递对象的键

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 通过参数传递对象的键脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我有这个代码

function cmp_asc($a,$b){
    $ta = date_create_From_format('Y/m/d',$a['PRops']['t']); //  Y/n/j  si no tienen 0 inicial
    $tb = date_create_from_format('Y/m/d',$b['props']['t']);
    $interval = date_diff($ta,$tb);

    if($interval->days != 0){
        if($interval->invert == 1){
            return 1;
        }else{
            return -1;
        }
    }else{
        return 0;
    }
}

$arr1 = array(
    'props' => array('t' => '2012/05/20')
);

$arr2 = array(
    'props' => array('t' => '2012/05/21')
);

$arr3 = array(
    'props' => array('t' => '2012/04/14')
);

$arr = array($arr1,$arr2,$arr3);

uasort($arr,'cmp_asc');

而且我想知道是否可以通过参数传递[‘props’] [‘t’].
所以,它最终会像:

function cmp_asc($a,$b,$key){
    $ta = date_create_from_format('Y/m/d',$a <-- $key -->);
    ...
...

我正在考虑变量变量,但我不太确定这是正确的变量.
还有其他想法吗?

解决方法

不是真的作为参数,因为你不是自己调用函数,但你可以使用 closures将其他变量传递给函数

$key1 = 'props';
$key2 = 't';

uasort($arr,function ($a,$b) use ($key1,$key2) {
    $ta = date_create_from_format('Y/m/d',$a[$key1][$key2]);
    ...
});

这只是一个简单的例子.如果你需要动态密钥深度,这将需要更多的代码,沿着这些方向

function getValue(array $value,$key) {
    $keys = explode('.',$key);
    foreach ($keys as $k) {
        $value = $value[$k];
    }
    return $value;
}

$arr = array('foo' => array('bar' => 'baz'));
echo getValue($arr,'foo.bar');

一个想法是使用一个类,其用法如下:

$cmp = new ComparisonClass;
$cmp->key = 'props.t';

uasort($arr,array($cmp,'compare'));

我会让你弄清楚ComparisonClass的实现.

一个更好的解决方案可能是简单地标准化您要排序的数组的格式.

脚本宝典总结

以上是脚本宝典为你收集整理的php – 通过参数传递对象的键全部内容,希望文章能够帮你解决php – 通过参数传递对象的键所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。