2016-07-12 44 views
1

任何人能解释如何利用这个数组:如何使用array_map工作

array(
    'Anto' => 25, 
    'Filip' => 22, 
    'Marko' => 17, 
    'Josip' => 23, 
    'Igor' => 24, 
    'Ivan' => 23, 
); 

和MAP这样说:

array(
    17 => [1, 'Marko'], 
    22 => [1, 'Filip'], 
    23 => [2, 'Josip', 'Ivan'], 
    24 => [1, 'Igor'], 
    25 => [1, 'Anto'], 
); 

新的数组包含岁键(从价值),值是一个数组,其中包含具有相同年龄的所有人的年龄相同的人数。

+0

尝试自己的东西,我们在这里不是为了写代码为您服务。对于初学者来看一个'foreach'循环,这可能对你有帮助。 – Nytrix

+0

看看这个答案,它可能会帮助你(你只需要添加计数器)http://stackoverflow.com/a/12706456/1437934 –

+0

男人,即时尝试。 – fvukovic

回答

1

foreach在这里会比array_map()简单。我还利用array_key_exists()ksort()使事情更加清洁。看到我下面的记录的例子。


实施例:

// Data. 
$initialArray = array(
    'Anto' => 25, 
    'Filip' => 22, 
    'Marko' => 17, 
    'Josip' => 23, 
    'Igor' => 24, 
    'Ivan' => 23, 
); 
$newArray = array(); 

// Loop. 
foreach($initialArray as $name => $age) { 
    if(!array_key_exists($age, $newArray)) { 
     // Initialize this age in the new array with empty counter. 
     $newArray[$age] = array(0); 
    } 

    // Increment the counter. 
    $newArray[$age][0]++; 

    // Append the name. 
    $newArray[$age][] = $name; 
} 

// Sort by age. 
ksort($newArray); 

// Dump. 
print_r($newArray); 

输出:

Array 
(
    [17] => Array 
     (
      [0] => 1 
      [1] => Marko 
     ) 

    [22] => Array 
     (
      [0] => 1 
      [1] => Filip 
     ) 

    [23] => Array 
     (
      [0] => 2 
      [1] => Josip 
      [2] => Ivan 
     ) 

    [24] => Array 
     (
      [0] => 1 
      [1] => Igor 
     ) 

    [25] => Array 
     (
      [0] => 1 
      [1] => Anto 
     ) 

) 

这是菊这是许多方法之一。我强烈建议您阅读更多关于控制结构的文章,以便您完全掌握这个概念......作为一名程序员,我们有必要向前迈进!

你也可以通过在你的逻辑结尾添加计数器来做到这一点。首先,你会根据他们的年龄将每个名字排序成一个数组。然后,您将通过并预先将count($names)添加到$names数组的开头$age索引处。

0

您可以使用array_walk。在这里你去:

$array = [ 
    'John' => 25, 
    'Tony' => 25, 
    'Anto' => 25, 
    'Filip' => 22, 
    'Marko' => 17, 
    'Josip' => 23, 
    'Igor' => 24, 
    'Ivan' => 23, 
]; 

$ages = []; 

array_walk($array, function ($age, $name) use (&$ages) { 
    // Does the age already exist? If so, we'll increment 
    // the count, otherwise we'll initialize it to one. 
    array_key_exists($age, $ages) ? $ages[$age][0]++ : $ages[$age][0] = 1; 

    $ages[$age][] = $name; 
}); 

var_dump($ages); 

输出:

array:5 [▼ 
    25 => array:4 [▼ 
    0 => 3 
    1 => "John" 
    2 => "Tony" 
    3 => "Anto" 
    ] 
    22 => array:2 [▼ 
    0 => 1 
    1 => "Filip" 
    ] 
    17 => array:2 [▼ 
    0 => 1 
    1 => "Marko" 
    ] 
    23 => array:3 [▼ 
    0 => 2 
    1 => "Josip" 
    2 => "Ivan" 
    ] 
    24 => array:2 [▼ 
    0 => 1 
    1 => "Igor" 
    ] 
]