从多维关联数组中提取特定数据

时间:2013-08-12 14:54:01

标签: php

我有以下数组

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 个答案:

答案 0 :(得分:2)

索引一次,经常阅读:

$indexed = array();

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

echo $indexed[3]['count'];

答案 1 :(得分:1)

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

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

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

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

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

答案 2 :(得分: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都会遍历数组。

答案 3 :(得分:-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;