<?php
$input = Array (
'key' => 'key string',
'sub' => Array (
0 => Array (
'id' => 123456,
'src' => 'source string',
'src_ids' => Array (
'0' => 1,
'1' => 2,
'2' => 3,
'3' => 4,
),
'data' => Array (
'a_data' => 'a string',
'b_data' => 'b string',
'c_data' => 'c string',
),
),
1 => Array (
'id' => 557799,
'src' => 'source string',
'src_ids' => Array (
'0' => 1,
'1' => 2,
),
'data' => Array (
'a_data' => 'a string',
'b_data' => 'b string',
'c_data' => 'c string',
),
),
),
);
$required = array(
'sub' => array(
array(
'id' => '',
'src' => '',
'src_ids' => '',
'data' => array(
'a_data' => '',
),
),
),
);
var_dump(checkRequired($input, $required));
/**
*
* @param array $data input
* @param array $req mandatory fields
* @return boolean
*/
function checkRequired($data, $req)
{
// no more required fields
if (empty($req))
return true;
// no more data fields; obviously lacks required field(s)
if (empty($data))
return false;
foreach ($req as $name => $subtree) {
// unnamed; it's a list
if (is_numeric($name)) {
foreach ($data as $dataitem) {
if (checkRequired($dataitem, $subtree) == false)
return false;
}
} else {
// required field doesn't exist
if (!isset($data[$name]))
return false;
// fine so far; down we go
if (!empty($subtree)
&& checkRequired($data[$name], $subtree) == false
) {
return false;
}
}
}
return true;
}