PHP - 如何以动态方式比较数组的值?

时间:2011-10-05 16:32:01

标签: php arrays compare array-difference

好的,我跟随'challange';

我有这样的数组:

Array
(
    [0] => Array
        (
            [id] => 9
            [status] => 0
        )

    [1] => Array
        (
            [id] => 10
            [status] => 1
        )

    [2] => Array
        (
            [id] => 11
            [status] => 0
        )
)

我需要做的是检查它们是否都具有相同的[状态]。 问题是,我可以在里面有2个或更多(动态)数组。

如何循环/搜索它们?

array_diff确实支持多个数组进行比较,但是怎么做呢? :( 我试过哪个循环,或者我的Apache /浏览器死了 - 或者我完全忘记了数据。

4 个答案:

答案 0 :(得分:2)

您可以将问题分开,以便更容易解决。

首先从您的数组中获取所有status项:

$status = array();
forach($array as $value)
{
    $status[] = $value['status'];
}

现在你有了一个名为$status的数组,你可以看到它是否总是包含相同的值,或者它是否有多个值:

$count = array_count_values($status);
echo count($count); # number of different item values.

答案 1 :(得分:1)

function allTheSameStatus( $data )
{
    $prefStatus = null;
    foreach( $data as $array )
    {
        if( $prefStatus === null )
        {
            $prefStatus = $array[ 'status' ];
            continue;
        }

        if( $prefStatus != $array[ 'status' ] )
        {
            return false;
        }
    }

    return true;
}

答案 2 :(得分:1)

试试这段代码:

$status1 = $yourArray[0]['status'];
$count = count($yourArray);
$ok = true;

for ($i=1; $i<$count; $i++)
{
  if ($yourArray[$i]['status'] !== $status1)
  {
    $ok = false;
    break;
  }
}

var_dump($ok);

答案 3 :(得分:0)

我不确定你想要什么作为输出,但你可以遍历外部数组并创建一个输出数组,按状态对内部数组进行分组:

$outputArray = array();
foreach ($outerArray as $an_array) {
    $outputArray[$an_array['status']][] = $an_array['id'];
}