在我的jQuery代码中,我创建了一个这样的对象:
var fields = [
['title','New Title'],
['description', 'New Description'],
['stuff', ['one','two','three']]
];
var objectsArray=[
{
fields:fields
}
];
var saveObject = {
command: 'test',
callback:'testResopnse',
objects: objectsArray
}
然后我通过ajax发送到这样的PHP页面:
saveDataAsParseObjects(saveObject)
function saveDataAsParseObjects(saveObj){
$.ajax({
type: "POST",
dataType: "json",
url: "php/parseFunctions.php",
data: {data:saveObj},
success: function(response) {
console.log(response);
},
error: function(response) {
console.log(response);
}
});
};
在我的PHP页面中,我这样做:
$data= $_POST['data'];
if($data['command'] == 'test'){
testStuff($data);
}
function testStuff($data){
$objects = $data['objects'];
foreach($objects as $object){
$fields = $object['fields'];
foreach($fields as $column => $value){
echo is_array($value) ? 'Array, ' : 'not an Array, ';
}
}
}
在jQuery页面上考虑我原来的fields
数组,我希望testStuff()
返回:
'not an Array, not an Array, Array,'
。
但它会返回:
'Array, Array, Array,'
为什么$value
在这个foreach循环中是一个数组,当我期望它是一个字符串?
foreach($fields as $column => $value)
答案 0 :(得分:2)
您在大多数嵌套的foreach中迭代此集合:
var fields = [
['title','New Title'],
['description', 'New Description'],
['stuff', ['one','two','three']]
];
所以每个$value
也是一个数组,例如['title','New Title']
。您应该再次迭代它或将字段更改为对象,如下所示:
var fields = {
title: 'New Title',
description: 'New Description',
stuff: ['one','two','three']
};
答案 1 :(得分:1)
您需要再次循环它,因为您的fields
数组是一个数组数组(以此伪为例):
Array(
INDEX => Array(...),
INDEX => Array(...),
INDEX => Array(...),
)
你需要的只是一个循环:
$fields = $object['fields'];
foreach($fields as $column => $value){
foreach($value as $key => $obj) {
echo is_array($obj) ? 'Array, ' : 'not an Array, ';
}
}
答案 2 :(得分:1)
因为每个$ value都是 fields 数组的元素。该数组的每个元素都是另一个数组。
所以
['title','New Title'],
在
var fields = [
['title','New Title'],
['description', 'New Description'],
['stuff', ['one','two','three']]
];
是 title 和新标题的数组。
如果你在php中调试或var_dump($ value),你会看到输出是
array (size=2)
0 => string 'title' (length=5)
1 => string 'New Title' (length=9)
array (size=2)
0 => string 'description' (length=11)
1 => string 'New Description' (length=15)
array (size=2)
0 => string 'stuff' (length=5)
1 =>
array (size=3)
0 => string 'one' (length=3)
1 => string 'two' (length=3)
2 => string 'three' (length=5)
答案 3 :(得分:0)
因为javascript变量"字段"是一个数组数组。
循环遍历$ fields时,循环遍历此变量(又名objectsArray [0] .fields)