0

我要疯了,在 php 中首次亮相 ..

我需要检查多维数组的键值是否都是数字..

我的 $values_arr 的 print_r() 给出:

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

我需要检查 18 和 99 和 150 是否是数字,我不知道数组中会出现什么,而且这个数组不会超过 2 维。

我尝试了很多东西,最后一个..:

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

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

                        echo "NOTGOOD";   

                 } 
                 }




                          ****UPDATE****

新测试:这里因为 chanel 不是 int ,这个例子应该是 echo "not 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) || !@allIntValues($v)){

echo "notgood";

 }

  else echo "good";
}

感谢您的帮助,问候

4

2 回答 2

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
于 2013-10-24T15:04:02.860 回答
0

您正在使用值而不是键:

if(  !in_array( $bar, $_fields_arr )  || !is_numeric($foo ) ) {
于 2013-10-24T15:00:29.770 回答