我有一个存储在数据库中的json对象数组,它们实际上是Revolution滑块的设置。从数据库表中检索并分配给php变量的字符串如下所示:
$json = '[
{"sliderType": "standard","options": ["standard","carousel","hero"]},
{"sliderLayout": "auto","options": ["auto","fullwidth","fullscreen"]},
{"responsiveLevels": 4096},
{"gridwidth": 1200},
{"gridheight": 700},
{"autoHeight": "off","options": ["on","off"]},
{"minHeight": 0},
{"fullScreenOffsetContainer": ""},
{"fullScreenOffset": "0"},
{"delay": 9000},
{"waitForInit": false,"options": [true,false]},
{"disableProgressBar": "off","options": ["on","off"]},
{"startDelay": 0},
{"stopAfterLoops": -1},
{"stopAtSlide": -1},
{"viewPort": [
{"enable": false,"options": [true,false]},
{"outof": "wait","options": ["wait","pause"]},
{"visible_area": "60%"}
]
},
{"lazyType": "smart","options": ["full","smart","single","none"]},
{"dottedOverlay": "none","options": ["none","twoxtwo","threexthree","twoxtwowhite","threexthreewhite"]},
{"shadow": 0,"options": [0,1,2,3,4,5,6]},
{"spinner": "spinner0","options": ["off", "spinner0", "spinner1","spinner2", "spinner3", "spinner4", "spinner5"]},
{"debugMode": false,"options": [true,false]},
{"extensions": "extensions/"},
{"extensions_suffix": ".min.js"},
{"fallbacks": [
{"panZoomDisableOnMobile": "off","options": ["on","off"]},
{"nextSlideOnWindowFocus": "off","options": ["on","off"]},
{"disableFocusListener": true,"options": [true,false]}
]
},
{"parallax": [
{"type": "off","options": ["off","mouse","scroll","mouse+scroll"]},
{"levels": [10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85]},
{"origo": "enterpoint","options": ["slidercenter","enterpoint"]},
{"speed": 400},
{"bgparallax": "on","options": ["on","off"]},
{"disable_onmobile": "off","options": ["on","off"]}
]
},
{"carousel": [
{"horizontal_align": "center","options": ["left","right","center"]},
{"vertical_align": "center","options": ["top","bottom","center"]},
{"infinity": "on","options": ["on","off"]},
{"space": 0},
{"maxVisibleItems": 3},
{"stretch": "off","options": ["on","off"]},
{"fadeout": "off","options": ["on","off"]},
{"maxRotation": 0},
{"minScale": 0},
{"vary_fade": "off","options": ["on","off"]},
{"vary_rotation": "on","options": ["on","off"]},
{"vary_scale": "off","options": ["on","off"]},
{"border_radius": "0px"},
{"padding_top": 0},
{"padding_bottom": 0}
]
},
{"navigation": [
{"keyboardNavigation": "on", "options": ["on","off"]},
{"keyboard_direction": "horizontal", "options": ["horizontal","vertical"]},
{"mouseScrollNavigation": "off", "options": ["on","off"]},
{"onHoverStop": "on", "options": ["on","off"]},
{"touch": [
{"touchenabled": "on", "options": ["on", "off"]},
{"swipe_treshold": 75},
{"swipe_min_touches": 1},
{"drag_block_vertical": false, "options": [true, false]},
{"swipe_direction": "horizontal", "options": ["horizontal","vertical"]}
]
},
{"arrows": [
{"style": ""},
{"enable": false, "options": [true, false]},
{"rtl": false, "options": [true, false]},
{"hide_onmobile": false, "options": [true, false]},
{"hide_onleave": true, "options": [true, false]},
{"hide_delay": 200},
{"hide_delay_mobile": 1200},
{"hide_under": 0},
{"hide_over": 9999},
{"tmp": ""},
{"left": [
{"container": "slider", "options": ["slider","layergrid"]},
{"h_align": "left", "options": ["left","center","right"]},
{"v_align": "center", "otpions": ["top","center","bottom"]},
{"h_offset": 20},
{"v_offset": 0}
]
},
{"right": [
{"container": "slider", "options": ["slider","layergrid"]},
{"h_align": "left", "options": ["left","center","right"]},
{"v_align": "center", "otpions": ["top","center","bottom"]},
{"h_offset": 20},
{"v_offset": 0}
]
}
]
},
{"bullets": [
{"style": ""},
{"enable": false, "options": [true, false]},
{"rtl": false, "options": [true, false]},
{"container": "slider", "options": ["slider","layergrid"]},
{"hide_onmobile": false, "options": [true, false]},
{"hide_onleave": true, "options": [true, false]},
{"hide_delay": 200},
{"hide_delay_mobile": 1200},
{"hide_under": 0},
{"hide_over": 9999},
{"tmp": "<span class=\"tp-bullet-image\"></span><span class=\"tp-bullet-title\"></span>"},
{"direction": "horizontal", "options": ["horizontal","vertical"]},
{"space": 0},
{"h_align": "left", "options": ["left","center","right"]},
{"v_align": "center", "otpions": ["top","center","bottom"]},
{"h_offset": 20},
{"v_offset": 0}
]
},
{"thumbnails": [
{"style": ""},
{"enable": false, "options": [true, false]},
{"rtl": false, "options": [true, false]},
{"container": "slider", "options": ["slider","layergrid"]},
{"width": 100},
{"height": 50},
{"wrapper_padding": 2},
{"wrapper_opacity": 1},
{"wrapper_color": "#f5f5f5"},
{"visibleAmount": 5},
{"hide_onmobile": false, "options": [true, false]},
{"hide_onleave": true, "options": [true, false]},
{"hide_delay": 200},
{"hide_delay_mobile": 1200},
{"hide_under": 0},
{"hide_over": 9999},
{"tmp": "<span class=\"tp-thumb-image\"></span><span class=\"tp-thumb-title\"></span>"},
{"direction": "horizontal", "options": ["horizontal","vertical"]},
{"span": false, "options": [true, false]},
{"position": "inner", "options": ["inner","outer-left","outer-right","outer-bottom","outer-top"]},
{"space": 0},
{"h_align": "left", "options": ["left","center","right"]},
{"v_align": "center", "otpions": ["top","center","bottom"]},
{"h_offset": 20},
{"v_offset": 0}
]
},
{"tabs": [
{"style": ""},
{"enable": false, "options": [true, false]},
{"rtl": false, "options": [true, false]},
{"container": "slider", "options": ["slider","layergrid"]},
{"width": 100},
{"height": 50},
{"wrapper_padding": 2},
{"wrapper_opacity": 1},
{"wrapper_color": "#f5f5f5"},
{"visibleAmount": 5},
{"hide_onmobile": false, "options": [true, false]},
{"hide_onleave": true, "options": [true, false]},
{"hide_delay": 200},
{"hide_delay_mobile": 1200},
{"hide_under": 0},
{"hide_over": 9999},
{"tmp": "<span class=\"tp-thumb-image\"></span><span class=\"tp-thumb-title\"></span>"},
{"direction": "horizontal", "options": ["horizontal","vertical"]},
{"span": false, "options": [true, false]},
{"position": "inner", "options": ["inner","outer-left","outer-right","outer-bottom","outer-top"]},
{"space": 0},
{"h_align": "left", "options": ["left","center","right"]},
{"v_align": "center", "otpions": ["top","center","bottom"]},
{"h_offset": 20},
{"v_offset": 0}
]
}
]
}
]';
我可以将它转换为stdClass对象或数组的数组,无论需要什么。 我已经使用所有这些对象呈现了页面,并在需要时使用X-editable来更改值。因此,当x-editable插件为单个对象发送新值时,值看起来像:
$_POST['name'] = 'navigation-arrows-left-container';
$_POST['value'] = 'customscontainer';
$_POST['pk'] = 1;
我再次能够从这些值构建一个json对象字符串:
$levels = explode('-', $_POST['name']);
$levels = array_reverse($levels);
$newjson = '';
foreach($levels AS $level){
if($newjson == ''){
$newjson = '"'.$level.'":"'.$_POST['value'].'"';
}else{
$newjson = '"'.$level.'":[{'.$newjson.'}]';
}
}
$newjson = '[{'.$newjson.'}]';
并将其转换为stdClass对象或常规数组。 但我不知道如何测试新值是否与默认值相同,因为索引不同。我需要的是一个函数,它将检查更改键的值是否与默认对象中的值不同,如果不同则返回true如果与默认值相同则返回false。
答案 0 :(得分:0)
我不是100%确定我理解你在说什么,但是如果你想在嵌套数组中找到相应的设置,你可以使用递归函数来隔离特定的模式或键/值对。这是一个例子:
/*
** @description This function will recurse the array and find a pattern
** based on the supplied array
*/
function search_array($array,$setting)
{
if(empty($setting))
return $array;
foreach($array as $key => $value) {
if(is_array($value)) {
if(is_numeric($key)) {
$val = search_array($value,$setting);
if(!empty($val))
$new[$key] = $val;
}
else {
if(is_array($setting) && isset($setting[0])) {
if($key == $setting[0]) {
unset($setting[0]);
$new[$key] = search_array($value,array_values($setting));
}
}
}
}
else {
if(is_array($setting) && isset($setting[0])) {
if($setting[0] == $key)
$new[$key] = $value;
}
}
}
if(!empty($new)) {
return $new;
}
}
上述函数根据此字符串navigation-arrows-left-container
:
Array
(
[26] => Array
(
[navigation] => Array
(
[5] => Array
(
[arrows] => Array
(
[10] => Array
(
[left] => Array
(
[0] => Array
(
[container] => slider
)
)
)
)
)
)
)
)
如果有如上所述提供的数组,它将被输入到下一个函数
/*
** @description This will flatten an array and find a specific key
*/
function get_by_key($array,$search,&$save)
{
foreach($array as $key => $value) {
if($key == $search) {
$save[$key] = $value;
}
else {
if(is_array($value)) {
get_by_key($value,$search,$save);
}
}
}
}
/*
** @description This takes your post array and returns an array or false if it
** can't find the key
*/
function get_setting($json,$POST)
{
# Set a storage array
$save = array();
# Explode the incoming string
$settings = explode('-',$POST['name']);
# Decode your json into an array for traversing
$array = json_decode($json,true);
# Run the search
$new = search_array($array,$settings);
# If empty, just stop
if(empty($new))
return false;
# Continue on with processing searching for the proper key
get_by_key($new,array_pop($settings),$save);
# Return the results of that search
return (!empty($save))? $save : false;
}
使用:
# The array input would be your $_POST array, I don't know how much you would
# like to do with the one function
print_r(get_setting($json,array('name'=>'navigation-arrows-left-container')));
上面的数组,给定相同的navigation-arrows-left-container
字符串将给出这个最终数组:
Array
(
[0] => Array
(
[container] => slider
)
)
你可以将一些逻辑组合成一个函数而不是我的两个函数,但这需要更多的工作。这应该足够了。