PHP:根据条件获取数组值

时间:2014-11-24 23:44:17

标签: php arrays

基于某些条件获取正确的值,我一直很困惑。首先,让我们看一下PHP函数var_dump()返回的内容。这只是调整我要查找的数据的重要部分。检查整个json对象here.

array (size=3)
  0 => 
    array (size=12)
      'inputs' => 
        array (size=2)
          0 => 
            array (size=3)
              'prev_out' => 
                array (size=7)
                  'addr' => string '1AvY95SQqtWy6MKWZbE3Xnqant9F3whfPH' (length=34)
                  'value' => int 1583375
          1 => 
            array (size=3)
              'prev_out' => 
                array (size=7)
                  'addr' => string '1KEUVc2TxDh1VAcvrS5p3PtJHcRwzrvin1' (length=34)
                  'value' => int 150000
      'out' => 
        array (size=2)
          0 => 
            array (size=7)
              'addr' => string '1Djp9h8mR3qqRz6v54nx265b8jZuqYNQ8j' (length=34)
              'value' => int 1046166
          1 => 
            array (size=7)
              'addr' => string '13W7N4NFwpTkYnHuVABcQfdrvDyszDqwkr' (length=34)
              'value' => int 677209

您刚才看到的是$ data [' txs']的输出。外部数组是事务列表。在每个内部,详细说明。 "输入的长度"和" out"可以换!我希望得到每笔交易的价值($ data [' txs'] [交易索引] [' out'] ['价值'])以下标准:

  1. " out"的价值交易应大于零。
  2. " out"的地址交易应该等于$ address。
  3. $ address不在"输入"交易。例如:$地址不能包含在所有['输入'] [计数(输入)] ['输入'] [' prev_out'] [& #39;地址'。]
  4. 这是我解决这个问题的最后一次尝试。问题是$ result保持为空,即使地址为13W7N4NFwpTkYnHuVABcQfdrvDyszDqwkr,结果应为677209。

    $i = 0;
    $txresult = array();    
    foreach($data['txs'] as $ct => $cv) {
    
        $index = count($data['txs'][$i]['inputs']) - 1;
        $addressindex = array();
        for($testindex = 0; $testindex < $index; $testindex++) {
            $addressindex[] = $data['txs'][$i]['inputs'][$index]['prev_out']['addr'];
        }
    
        $counter = count($data['txs'][$i]['out']) - 1;      
        for($count = 0; $count < $counter; $count++) {
            if ($data['txs'][$i]['out'][$count]['value'] > 0 && $data['txs'][$i]['out'][$count]['addr'] == $address && !in_array($address, $addressindex)) {
                $result = $data['txs'][$i]['out'][$count]['value'];
            }
        }
        $i++;
    }
    

    请记住,我削减了代码的范围,因此可能需要进行太多更改的一些建议可能无效。我会尽力回答你的问题。

1 个答案:

答案 0 :(得分:0)

按照我自己的条件计算出来。 @Wrikken有助于得出结论。

解决方案非常简单。只有两件事:

  • $ i ++不应该在任何for循环中,所以我把它放在foreach循环的末尾。
  • 我不得不取消$ addressindex,$ counter和$ index。