-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];

実際には1行でそれを行うことができます:

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 に答える