Exemple #1
0
 /**
  * @param array $arr1
  * @param array $arr2
  *
  * @return array
  */
 function array_merge_recursive_overwrite($arr1, $arr2)
 {
     if (debug_assert(is_array($arr1) && is_array($arr2))) {
         foreach ($arr2 as $key => $value) {
             if (array_key_exists($key, $arr1) && is_array($value)) {
                 $arr1[$key] = array_merge_recursive_overwrite($arr1[$key], $arr2[$key]);
             } else {
                 if (isset($value)) {
                     $arr1[$key] = $value;
                 }
             }
         }
     }
     return $arr1;
 }
Exemple #2
0
function array_merge_recursive_overwrite()
{
    $args = func_get_args();
    $destination = array();
    foreach ($args as $arr) {
        foreach ($arr as $key => $value) {
            if (array_key_exists($key, $destination) && is_array($value)) {
                $destination[$key] = array_merge_recursive_overwrite($destination[$key], $arr[$key]);
            } else {
                $destination[$key] = $value;
            }
        }
    }
    return $destination;
}
Exemple #3
0
/**
 * 获取数组下面的某些项的集合
 * 如 $a = array('a' => array('f1'=>'v1','f2'=>'v2','f3'=>'v3'),'b' => array('f1'=>'v4','f2'=>'v5'),'c'=>array('f1'=>'v6'));
 * 如 $selector = 'a,b/f1'; 得到 array('a' => array('f1'=>'v1'),'b' => array('f1'=>'v4'));
 * 如 $selector = 'a/*'; 得到 array('a' => array('f1'=>'v1','f2'=>'v2','f3'=>'v3'));
 *
 * @param array $data  数组
 * @param string $selector  条件表达式 [/] 表示数组维度;  [[,][;] (逗号,分号)表示同维度KEY1和KEY2和KEYN...; [*] 表示同维度全部的KEY,此参数注意事项请见_array_selector_keymaker;
 * @return array 返回根据表达式计算出来的值
 */
function array_selector(array $data, $selector = '*')
{
    if (!is_array($data)) {
        return false;
    }
    $result = array();
    //print_r($result);
    if (!empty($selector)) {
        $root = _array_selector_keymaker($selector);
        foreach ($root as $keys) {
            $_data = $data;
            _array_selector_rev($_data, $keys);
            //
            $result = array_merge_recursive_overwrite($result, $_data);
        }
    }
    return $result;
}