Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 搜索数组并使用结果创建新数组_Php_Arrays_Multidimensional Array - Fatal编程技术网

Php 搜索数组并使用结果创建新数组

Php 搜索数组并使用结果创建新数组,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我需要搜索一个数组,并希望像下面提供的示例一样返回结果 我知道我可以在数组中循环,但我想看看是否有更好的方法来实现这一点,因为这将是搜索大量数据 在如下数组中搜索: // initial array $search_thru = array( array('member_id' => 6, 'field_id_1' => 'some data', 'field_id_5' => NULL), array('member_id' => 15, 'field_

我需要搜索一个数组,并希望像下面提供的示例一样返回结果

我知道我可以在数组中循环,但我想看看是否有更好的方法来实现这一点,因为这将是搜索大量数据

在如下数组中搜索:

// initial array
$search_thru = array(
    array('member_id' => 6, 'field_id_1' => 'some data', 'field_id_5' => NULL),
    array('member_id' => 15, 'field_id_1' => NULL, 'field_id_5' => NULL),
    array('member_id' => 21, 'field_id_1' => 'this field too', 'field_id_5' => 'this field has some data');
);
在数组中搜索,如果
成员的id
有任何键等于NULL,则将其添加到结果数组中

成员id
应该是新数组中数据集的键。 键的数据不应该是值为NULL的键的全名,而应该是数字

示例:
field\u id\u 1=>1

// expected result
$result = array(
    6 => array(5),
    15 => array(1, 5),
);
提前谢谢。

我想有,您可以使用

实际上你可以使用应该是正确的函数。 它应该返回与该值匹配的所有键,然后您可以轻松地循环通过这些键来执行所需的任何操作


尽管这种方法可能并不比在整个数据集中循环(如果有许多空值)更有效。

虽然有更好的数组操作函数,但在需要更改键时,
foreach
循环似乎是一种简单的方法:

<?php

$haystack = array(
  array('member_id' => 6, 'field_id_1' => 'some data', 'field_id_5' => NULL),
  array('member_id' => 15, 'field_id_1' => NULL, 'field_id_5' => NULL),
  array('member_id' => 21, 'field_id_1' => 'this field too', 'field_id_5' => 'this field has some data'),
);

$result = array();
foreach($haystack as $row) {
  if(in_array(null, $row)) {
    $result[$row['member_id']] = array();

    foreach($row as $key => $value) {
      if($value === null) {
        $result[$row['member_id']][] = str_replace('field_id_', '', $key);
      }
    }
  }
}

您可以以函数式的方式完成部分操作,但是PHP的
数组映射
不允许您使用数组键,因此
foreach
似乎是输出所需格式的最直接的方法:

<?php

function strip_prefix( $string ) {
  $prefix = 'field_id_';
  return explode( $prefix, $string )[1];
}

function get_null_fields( $member ) {
  $null_keys = array_keys( $member, NULL, true ); // get all keys with NULL values
  return array_map( 'strip_prefix', $null_keys );
}

// initial array
$search_thru = array(
    array('member_id' => 6,  'field_id_1' => 'some data', 'field_id_5' => NULL),
    array('member_id' => 15, 'field_id_1' => NULL, 'field_id_5' => NULL),
    array('member_id' => 21, 'field_id_1' => 'this field too', 'field_id_5' => 'this field has some data')
);

$tmp = array();
foreach ( $search_thru as $member ) {
  $tmp[ $member['member_id'] ] = get_null_fields($member);
}

$result = array_filter( $tmp, 'count' ); // remove items with no null fields

print_r($result);

您尝试过什么吗?Foreach循环非常容易编写。您可以根据您的个人需要对其进行大量定制。运行时为O(n)。所以,我看不出有什么理由不在foreach循环中点击每个索引,并在运行时附加到结果数组中。这似乎是一个合乎逻辑的起点