最优化的方法是在不使用循环的情况下搜索关联数组

时间:2018-04-17 13:18:10

标签: php arrays loops

例如从下面的关联数组中搜索名称而不使用循环。

$data = array(
            array('name'=>'john doe', 'marks'=>23),
            array('name'=>'stevin smith', 'marks'=>76),
            array('name'=>'david warner', 'marks'=>71)
);

3 个答案:

答案 0 :(得分:4)

您可以将array_column()与第三个参数一起使用来创建关联数组。因此,使用它来创建一个标记数组,由名称列索引...

$data = array(
    array('name'=>'john doe', 'marks'=>23),
    array('name'=>'stevin smith', 'marks'=>76),
    array('name'=>'david warner', 'marks'=>71));

$marks = array_column($data, 'marks', 'name');

$name = 'john doe';

if ( isset($marks[$name]))  {
    echo $name."=".$marks[$name];
}

由于数组是由名称索引的,只需使用'isset()'。

答案 1 :(得分:0)

最好的方法是使用array_column函数



$data = array(
			array('name'=>'john doe', 'marks'=>23),
			array('name'=>'stevin smith', 'marks'=>76),
			array('name'=>'david warner', 'marks'=>71));

		$names = array_column($data, 'name');
		$search = 'david warner';
		if(in_array($search, $names))
			echo "Found";
		else
			echo "Not";




答案 2 :(得分:0)

只要您正在评估数组的每个信息,php将在内部使用迭代器。鉴于循环非常便宜,这是一件好事。

但如果你不想明确地迭代,这里有一个解决方案:

  $johnDoeExists = array_walk_recursive( $data, function ( $value, $key ) {
      return $key === 'name' && $value === 'john doe';
  } );

array_walk_recursive使用已定义的回调函数评估数组的每个元素,嵌套与否。

或者,等等......

如果你真的不想使用循环并编写一个绝对糟糕且不可靠的代码,那么就去吧。

$johnExists = strpos(json_encode($data), "john doe") !== 0;

不用说,只需循环数据。