2013-10-24 66 views
0

我是戈纳疯狂,在PHP开张..检查多维数组键的所有值是否都是数字?

我需要检查,如果一个multidimentionnal数组的键值都是数字..

一的print_r($我的values_arr)给出的是:

Array ([coco] => Array ([0] => 18 [1] => 99) [chanel] => 150 

我需要检查是否18和99和150是数字,我不知道会在数组中,这个数组将不会更多的2维。

我tryed很多东西,最后一个..:

foreach ($values_arr as $foo=>$bar) { 

if( !in_array($foo, $_fields_arr) || !is_numeric($bar)) { 

         echo "NOTGOOD"; 

       } 
       } 




          ****UPDATE**** 

新的测试:在这里,因为香奈儿状态并没有整型,本例应回声“不goud”, 但其并非如此..

$_fields_arr = array('coco','chanel','other');         

$ary = array(
    'coco' => array(18, 99), 
    'chanel' => 'yu' 
); 


function allIntValues($o) 
{ 
    if (is_int($o)) return true; 
    if (is_array($o)){ 
    foreach ($o as $k => $v) { 
     if (!is_int($v)) return false; 
    } 
    } 
    return true; 
} 

foreach ($ary as $k => $v) { 
    if (!in_array($k, $_fields_arr) || [email protected]($v)){ 

echo "notgood"; 

} 

    else echo "good"; 
} 

感谢您的帮助, 问候

+0

你是什么意思“数字”?你是指数据类型(int,float),还是代表字段的字符串也可以吗? – Erbureth

+0

int将是完美的..我曾尝试和!is_int()但我总是相同的pb .. – albator

回答

0

您使用的是价值,而不是关键:

if( !in_array($bar, $_fields_arr) || !is_numeric($foo)) { 
+0

我犯了错误,我想,我必须控制的关键的价值,在我的解释说我是在谈论控制if 18,99,150是数字 – albator

+0

'$ foo'是关键字('$ key => $ value') – Manolo

1

更新:

$ary = Array(
    'coco' => array(18, 99), 
    'chanel' => 150 
); 
$_fields_arr = array('coco', 'chanel'); 

function allIntValues($o) 
{ 
    if (is_int($o)) return true; 
    if (is_array($o)){ 
    foreach ($o as $k => $v) { 
     if (!is_int($v)) return false; 
    } 
    } 
    return true; 
} 

foreach ($ary as $k => $v) { 
    if (in_array($k, $_fields_arr) && @allIntValues($v)){ 
    // $ary[$k] is no good 
    } 
} 

假设你要测试是否所有值是数字(不管有多深值的嵌套):

function is_numeric_array($ary) 
{ 
    foreach ($ary as $k => $v) 
    { 
    if (is_array($v)) 
    { 
     if (!is_numeric_array($v)) 
     return false; 
    } 
    else if (!is_numeric($v)) 
     return false; 
    } 
    return true; 
} 

这将(递归)检查数组并确保数组内的每个值都是数字。

array(1,2,3) // true 
array('foo','bar','baz') // false ('foo', 'bar' & 'baz') 
array(1,2,array(3,4)) // true 
array(array(1,'foo'),2,3) // false (foo) 
array("1,", "2.0", "+0123.45e6") // true 
+0

请注意,[is_numeric](http://php.net/manual/en/function.is-numeric。 php)返回true表示数字字符串 – Erbureth

+0

我必须保持我的foreach($ values_arr为$ foo => $ bar)如果(!in_array($ foo,$ _fields_arr)条件与它,实际上它给了我一个错误“调用未定义的函数is_numeric_array()”,你能给我一些具体的例子吗? – albator

+0

@Erbureth:的确如果这需要类型敏感,你也可以添加检查'is_int' /'is_double' –

相关问题