用Php搜索多维数组以匹配两个数组的键

用Php搜索多维数组以匹配两个数组的键,php,arrays,Php,Arrays,下面是两个数组格式的示例,完整代码和下面代码中的数组内容 数组1 Array ( [version] => 1.0 [injuries] => Array ( [timestamp] => 1377702112 [week] => 1 [injury] => Array ( [0] => Array ( [status] => Questionable [id] => 10009 [details] => Shoulder ) [1] =

下面是两个数组格式的示例,完整代码和下面代码中的数组内容

数组1

Array
(
[version] => 1.0
[injuries] => Array
(
[timestamp] => 1377702112
[week] => 1
[injury] => Array
(
[0] => Array
(
[status] => Questionable
[id] => 10009
[details] => Shoulder

)

[1] => Array
(
[status] => Questionable
[id] => 10012
[details] => Ankle

)
阵列2

Array
(
[version] => 1.0
[players] => Array
(
[timestamp] => 1377676937
[player] => Array
(
[0] => Array
(
[position] => TMDL
[name] => Bills, Buffalo
[id] => 0251
[team] => BUF
)

[1] => Array
(
[position] => TMDL
[name] => Colts, Indianapolis
[id] => 10009
[team] => IND
)
我需要做的是对这两个数组进行排序,并找到ID键的匹配值。然后我需要将两个数组的值组合成一个数组,这样我就可以在屏幕上打印出来。提供了两个API,一个用于带有玩家[id]键的受伤报告,另一个用于带有[id]键的玩家信息。以下是我在这个问题上取得的进展:

<?php

       function injuries_report() {         

       //Get json files

         $injuryData = file_get_contents('http://football.myfa...=1&callback=');
         $playerData = file_get_contents('http://football.myfa...L=&W=&JSON=1');

       //format json data into an array

          $obj1 = json_decode($injuryData, true);
         $obj2 = json_decode($playerData, true);



         //return print_r($obj1);   //print obj1 to see output

         return print_r($obj2);     //print obj2 to see output

       }

      ?> 

       <!--get injuries report -->

      <pre><?php injuries_report(); ?></pre>

这是工作代码,多亏了克里斯:)

$injuryData=file\u get\u contents('http://football.myfantasyleague.com/2013/export?TYPE=injuries&L=&W=&JSON=1&callback=');
$array1=json_decode($injuryData,true);
$playerData=文件\u获取\u内容('http://football.myfantasyleague.com/2013/export?TYPE=players&L=&W=&JSON=1');
$array2=json_decode($playerData,true);
功能图($x){
全球1美元;
如果(isset($x['id'])){
$id=$x['id'];
$valid=array_filter($array1['injury']['injury'],create_函数('$injury','return$injury['id']=='。$id';');
如果(计数($valid)>0){
$x=数组_合并($x,数组_移位($valid));
}
}
返回$x;
}
$output=array_map('map',$array2['players']['player']);
回声“;
打印(输出);
回声“;

好的,我假设你想给球员增加伤害。输出将是球员名单,并添加受伤情况(如果适用)

输出如下:


PHP5.2 编辑最新工作版本:

哦,您正在使用PHP5.2。这是一个php 5.2版本,但它没有以前的代码好看:


$array1
在这里是全局的。检查此处:

显示结果数组的外观。是否要打印所有球员并打印受伤球员(如果有),还是只打印受伤球员?我需要一个带有匹配ID的球员[name]键的新数组,该键显示球队全名。这是一个运动伤害API,所以我想展示所有受伤的球员。实际的plaers名称在另一个API调用中,看起来像这样:我需要在这里做一些事情:&players=[Id key在这里]我的大脑受伤了…解析错误:语法错误,意外的T_函数,第17行的/home4/bags/public_html/wp content/themes/fantasy/page.php中应为“'),不确定这是不是,但第17行是第一行代码。我的服务器运行的是PHP5.2,有没有一种不用匿名函数的方法?我不确定我在这里遗漏了什么,代码看起来不错,我有它就像你写的一样,但不起作用:(@MichaelHicks很遗憾您使用的是PHP5.2,但无论如何,我已经创建了一个PHP5.2兼容版本。请检查。我不明白。以下是我在组合所有内容时得到的结果:当我在mky网站上尝试时,我得到以下错误:警告:array_filter()[function.array filter]:第一个参数应该是第16行的/home4/bags/public_html/wp content/themes/fantasy/page.php中的一个数组。您使用了C选项而不是php选项。无论如何,试试这个:(我在这里没有使用codepad.org,因为它似乎不喜欢
file\u get\u contents
命令)
$injuryData = file_get_contents('http://football.myfantasyleague.com/2013/export?TYPE=injuries&L=&W=&JSON=1&callback=');
    $array1 = json_decode($injuryData, true);
    $playerData = file_get_contents('http://football.myfantasyleague.com/2013/export?TYPE=players&L=&W=&JSON=1');
    $array2 = json_decode($playerData, true);

    function map($x) {
       global $array1;
       if(isset($x['id'])) {
          $id = $x['id'];
          $valid = array_filter($array1['injuries']['injury'], create_function('$injury', 'return $injury["id"] == "' . $id .'";'));
          if(count($valid) > 0) {
             $x = array_merge($x, array_shift($valid));
          }
           }
           return $x;
        }
        $output = array_map('map', $array2['players']['player']);
        echo "<pre>";
        print_r($output);
        echo "</pre>";
$output = array_map(function($x) use ($array1) {
   $id = $x['id'];
   $valid = array_filter($array1['injuries']['injury'], function($injury) use ($id) {
      return $injury['id'] == $id;
   });
   if(count($valid) > 0) {
      $x = array_merge($x, $valid[0]);
   }
   return $x;
}, $array2['players']['player']);

print_r($output);
Array
(
    [0] => Array
        (
            [position] => TMDL
            [name] => Bills, Buffalo
            [id] => 0251
            [team] => BUF
        )

    [1] => Array
        (
            [position] => TMDL
            [name] => Colts, Indianapolis
            [id] => 10009
            [team] => IND
            [status] => Questionable
            [details] => Shoulder
        )
)
$injuryData = file_get_contents('http://football.myfantasyleague.com/2013/export?TYPE=injuries&L=&W=&JSON=1&callback=');
$array1 = json_decode($injuryData, true);
$playerData = file_get_contents('http://football.myfantasyleague.com/2013/export?TYPE=players&L=&W=&JSON=1');
$array2 = json_decode($playerData, true);

function map($x) {
   global $array1;
   if(isset($x['id'])) {
      $id = $x['id'];
      $valid = array_filter($array1['injuries']['injury'], create_function('$injury', 'return $injury["id"] == "' . $id .'";'));
      if(count($valid) > 0) {
         $x = array_merge($x, array_shift($valid));
      }
   }
   return $x;
}
$output = array_map('map', $array2['players']['player']);
print_r($output);