-1

我有以下数组

Array ( 
    [0] => Array (
        [name] => 1
        [count] => 77937
    )
    [1] => Array (
        [name] => 2 
        [count] => 20
    )
    [2] => Array (
        [name] => 4
        [count] => 25
    )
    [3] => Array (
        [name] => 5
        [count] => 11365
    )
)

如何在不遍历数组的情况下获得名称 3 的计数?

4

4 回答 4

2

索引一次,经常阅读:

$indexed = array();

foreach ($arr as $values) {
    $indexed[$values['name']] = $values;
}

echo $indexed[3]['count'];
于 2013-08-12T15:24:48.873 回答
1

如果您使用的是 PHP 5.5,则可以使用array_column

$index = array_column($arr, 'count', 'name');
echo $index[3];

你实际上可以用一行来做到这一点:

echo array_column($arr, 'count', 'name')[3];

除此之外,循环是您最好的选择。

于 2013-08-12T15:45:44.143 回答
0

尝试这个 :

$p = array(array('name' => 1, 'count' => 77937),
           array('name' => 2, 'count' => 20),
           2 => array('name' => 4, 'count' => 25),
           3 => array('name' => 5, 'count' => 11365));

class my_finder
{
    private $n;
    function __construct($n)
    {
        $this->n = $n;
    }
    function findByName($arr)
    {
        return $arr['name'] == $this->n;
    }
}

$matches = array_filter($p, array(new my_finder(4), 'findByName'));

print_r ($matches);

当然,这只是假装没有循环。无论如何,array_filter 都会为您遍历数组。

于 2013-08-12T15:37:35.040 回答
-2

试试这个,我为函数中的名称字段选择了 2...

<?php
global $count;

$temp = array( 
 '0' => array ( 'name' => 1, 'count' => 77937 ),
 '1' => array ( 'name' => 2 ,'count' => 20 ),
 '2' => array ( 'name' => 4 ,'count' => 25 ),
 '3' => array ( 'name' => 5, 'count' => 11365)
 );

function mapper($data)
{
 global $count;

  if($data['name'] == 2)
  $count = $data['count'];
}

 array_map('mapper',$temp);

 echo $count;
于 2013-08-12T15:08:56.633 回答