2011-08-03 40 views
0

在PHP中,我愿意检查与数组中其他值匹配的索引的存在。最好的方式来引用索引,其中包含数组

$indexes = array("index", "id", "view"); 
$fields = array(
    "index" => 5, 
    "id" => 7, 
    "form" => 10, 
    "date" => 10, 
); 

我的理想结果是,在这种情况下,得到“形式”和“日期”。任何想法?

回答

5

尝试

$fields_keys = array_keys($fields); 
$fields_unique = array_diff($fields_keys, $indexes); 

结果将是$fields中不在$indexes中的所有密钥的数组。

+0

我知道有更好的办法!做得好。 –

+0

它的工作原理!谢谢! –

+0

@Kei Izumi - 不要忘记标记为“接受”,如果它为你工作。 – OverZealous

1

你的问题有点不清楚,但我认为这是你要的

array_keys(array_diff_key($fields, array_fill_keys($indexes, null))); 
#=> Array(0=>"form", 1=>"date") 

什么看它在这里工作的tehplayground.com

array_keys(A)返回数组A的按键为数字索引数组。
array_fill_keys(A, value)填充使用数组A作为键一个新的数组,并设置每个键
array_diff_key(A,B)返回键从数组A的阵列中不阵列乙存在。

编辑打开我的回答变得更加复杂,因为我更了解原始问题。在这个页面上有更好的答案,但我仍然认为这是一个有趣的解决方案。

+0

这只会工作,如果'$ indexes'也是联想:http://www.php.net/manual/en/function.array-diff-key.php - 酷法,但! – OverZealous

+0

@OverZealous,wups,我忽略了这一点。不用担心,'array_fill_keys()'救援! –

+0

有趣的方式!谢谢 –

1

您可以使用array_keys函数来获取一个数组的键

如:

$array = array(0 => 100, "color" => "red"); 
print_r(array_keys($array)); 

输出

Array 
(
    [0] => 0 
    [1] => color 
) 

PHP Documentation

0

有可能是一个比这个滑头的方式,但它让你开始:

foreach(array_keys($fields) as $field) { 
    if(!in_array($field, $indexes)) { 
     $missing[] = $field; 
    } 
} 

现在你将有保存形式和日期的数组。

2

你可以试试这个。

<?php 
$indexes = array("index", "id", "view"); 
$fields = array(
    "index" => 5, 
    "id" => 7, 
    "form" => 10, 
    "date" => 10, 
); 

$b = array_diff(array_keys($fields), $indexes); 
print_r($b); 
相关问题