【问题标题】:Modify multidimensional array value from searching by key = value通过key = value搜索修改多维数组值
【发布时间】:2018-06-30 16:41:17
【问题描述】:

我这里有一个数组:

$records = array(
    array(
        'id' => 2,
        'first_name' => 'John',
        'last_name' => 'Doe',
        'num' => 123,
    ),
    array(
        'id' => 4,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
        'num' => 146,
    ),
    array(
        'id' => 8,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
        'num' => 253,
    ),
    array(
        'id' => 9,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
        'num' => 632,
    )
);

如何在数组$results 中搜索ID 8 并修改num?例如,查找 ID = 8 的数组并将 5 添加到 num?修改后的$result 数组将是:

$records = array(
    array(
        'id' => 2,
        'first_name' => 'John',
        'last_name' => 'Doe',
        'num' => 123,
    ),
    array(
        'id' => 4,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
        'num' => 146,
    ),
    array(
        'id' => 8,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
        'num' => 258,
    ),
    array(
        'id' => 9,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
        'num' => 632,
    )
);

【问题讨论】:

标签: php arrays search multidimensional-array replace


【解决方案1】:

这是实现输出的一种方式

$records = array(
    array(
        'id' => 2,
        'first_name' => 'John',
        'last_name' => 'Doe',
        'num' => 123,
    ),
    array(
        'id' => 4,
        'first_name' => 'Sally',
        'last_name' => 'Smith',
        'num' => 146,
    ),
    array(
        'id' => 8,
        'first_name' => 'Jane',
        'last_name' => 'Jones',
        'num' => 253,
    ),
    array(
        'id' => 9,
        'first_name' => 'Peter',
        'last_name' => 'Doe',
        'num' => 632,
    )
);

foreach($records as $key => $value)
{
    if($value['id']=='8'){
        $records[$key]['num'] = $value['num']+5;
    }   
}
    echo "<pre>";
    print_r($records);
    exit;

【讨论】:

    【解决方案2】:

    使用这个...

    foreach ($records as $key => $value) {
        $search_value = "";
        $search_value = array_search("8",$value);
        if($search_value!="")
            $value["num"] = $value["num"]+5;
        $result[] = $value;
    }
    print_r($result);
    

    【讨论】:

      【解决方案3】:

      试试这个

      使用&amp;$r 数组通过引用传递,因此您可以在没有键的情况下更新for循环中的值

      foreach($records as &$r){
      
       if($r['id'] == 8){
          $r['num'] = 258;
       }  
      }
      

      【讨论】:

        【解决方案4】:
        <?php
        $records = array(
            array(
                'id' => 2,
                'first_name' => 'John',
                'last_name' => 'Doe',
                'num' => 123,
            ),
            array(
                'id' => 4,
                'first_name' => 'Sally',
                'last_name' => 'Smith',
                'num' => 146,
            ),
            array(
                'id' => 8,
                'first_name' => 'Jane',
                'last_name' => 'Jones',
                'num' => 253,
            ),
            array(
                'id' => 9,
                'first_name' => 'Peter',
                'last_name' => 'Doe',
                'num' => 632,
            ));
        
        
        
         $id2 = searchForId(8, $records);
        
        
        
        function searchForId($id, $records) {
           foreach ($records as $key => $val) {
               if ($val['id'] === $id) {
        
                   $abc = $records[$key]['num'] = $val['num']+5;
                   echo "<pre>";
                   print_r($records);
               }
           }
           return null;
        }
        ?>
        

        【讨论】:

          【解决方案5】:

          这一个班轮技巧将解决您的问题,

          $records[array_search(8, array_column($records, 'id'))]['num'] += 5;
          print_r($records);
          

          array_search在数组中搜索给定值,如果成功则返回第一个对应的键
          array_column返回输入数组中单列的值

          这里正在工作demo

          【讨论】:

            【解决方案6】:

            foreach($records as $key => $data) {
            	if(in_array(8,$data)) {
            		$records[$key]['num'] = 253+50;
            	}
            }
            
            echo "<pre>";
            print_r($records);

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2011-05-22
              • 2010-11-04
              • 2019-10-16
              • 2014-05-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多