2013-09-24 62 views
0

有一次我在采访中被问到一个问题。下面是这样一个问题:
键在数组中相同的值

$arry= array("1"=>"20", "2"=>"20", "3"=>"30", "4"=>"40" "5"=>"20"); 

有人问我找到它具有通过使用foreach循环的值相同的密钥。

我仍然不知道这个问题的解决方案。任何帮助?

+0

由于面试问题去,那是关于基本,因为它得到。你在哪里坚持下去?你试过什么了? – Spudley

回答

5
$arry= array("1"=>"20", "2"=>"20", "3"=>"30", "4"=>"40", "5"=>"20"); 

$results = array(); 
foreach($arry as $key=>$value) { 
    $results[$value][] = $key; 
} 

var_dump($results); 
+0

不会'$ results [$ value] []'发出通知('$ results [$ value]'永远不会在您的代码中声明为数组)。这就是为什么我将'array_fill_keys'调用添加到我的答案 –

+0

不应该为我发出任何通知,但完全错误日志 –

+0

@EliasVanOotegem它应该,但在这种情况下,我只是在该行前面加上一个'@'它被称为速记。 @Mark你可能没有'error_reporting(-1)'激活。 –

2

See the result here
<?php 
$arry= array("1"=>"20", "2"=>"20", "3"=>"30", "4"=>"40","5"=>"20"); 

$list = array(); 
foreach ($arry as $key => $value) 
{ 
    if (!isset($list[$value])) 
    { 
     $list[$value] = array(); 
    } 

    $list[$value][] = $key; 
} 
var_export($list); 
0
foreach ($arry as $key=>$value) { 
    if ($value == $findValue) 
     print $key.' '; 
} 

$findValue是20,则此代码打印1 2 5

+0

但可以是任意数量的值,我的意思是可以有许多键将具有相同的值..不仅20 ... –

+0

可以请你告诉我有关变量$ findValue .. ??我必须声明它为空?或者其他的东西。 ? –

1
$arry= array("1"=>"20", "2"=>"20", "3"=>"30", "4"=>"40", "5"=>"20"); 
$newArr = array(); 
foreach($arry as $key => $val) { 
    if(!array_key_exists($val, $newArr)) $newArr[$val] = ""; 
    $newArr[$val] .= " - " . $key; 
} 

var_dump($newArr); 

OUTPUTVALUES => KEYS_WITH_SAME_VALUES

array (size=3) 
20 => string ' - 1 - 2 - 5' (length=12) 
30 => string ' - 3' (length=4) 
40 => string ' - 4' (length=4) 
+0

或者,使用Mark Ba​​ker的答案(或我的):'foreach($ newArr as $ keys){implode(' - ',$ keys); }'。除了改进格式_1 - 2 - 5 _而不是_“ - 1 - 2 - 5”_...:P –

0

最简单的方法:

<?php 
$array = array("1"=>"20", "2"=>"20", "3"=>"30", "4"=>"40" ,"5"=>"20"); 
print_r(array_count_values($array)); 
?> 

用foreach:

<?php 
$array = array("1"=>"20", "2"=>"20", "3"=>"30", "4"=>"40" ,"5"=>"20"); 
$result = array(); 
foreach($array as $value) { 
    $result[$value]++; 
} 
print_r($result); 
?> 

试试看here

相关问题