如何动态比较数组的值


PHP - how to compare value of arrays in dynamic way?

好的,下面是challenge;

我有一个这样的数组:

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

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

如何循环/搜索它们?

array_diff确实支持多个数组来比较,但如何做到这一点?:(我曾经尝试过的任何循环,或者我的Apache/浏览器死亡-或者我得到了完全虚假的数据。

你可以把问题分开,这样更容易解决。

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

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

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

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

试试下面的代码:

$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);
function allTheSameStatus( $data )
{
    $prefStatus = null;
    foreach( $data as $array )
    {
        if( $prefStatus === null )
        {
            $prefStatus = $array[ 'status' ];
            continue;
        }
        if( $prefStatus != $array[ 'status' ] )
        {
            return false;
        }
    }
    return true;
}

我不知道你想要输出什么但是你可以遍历外部数组并创建一个输出数组根据状态将内部数组分组

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