为什么这个PHP foreach中的$ value循环一个数组?

时间:2015-08-19 07:03:11

标签: php jquery arrays foreach

在我的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)

4 个答案:

答案 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)