【问题标题】:How do I only grab one key value pair at a time? PHP如何一次只获取一个键值对? PHP
【发布时间】:2016-01-21 03:52:44
【问题描述】:

我是 PHP 新手,所以需要一些帮助。

我似乎已经几乎达到了我所需要的。但是,下面的代码将完全符合我的要求,即遍历每条记录并获取所有键值对。尽管如此,一旦条件达到“else”,我不想打印所有剩余的 $key $val 对。相反,我想要的是抓住下一个最关键的 => val 对并重复直到每条记录完成。

例如现在这段代码将打印出我想要的每条记录的 LIST_1、LIST_87。我希望它也只抓住下一对 $key => $val,而不是剩下的。这样我就可以将每个 $key => $val 对注入到 mySql 中的一行中。

但是现在,它给了我 LIST_1、LIST_87 和所有剩余的 $key => $val's。 它看起来像这样:

Record: 0 *************************

LIST_124 => 0.00
GF20121126194243819854000000 => Entry Lvl Lvng Area,Fire Sprinkler,Foyer,Pantry,Volume Ceiling,Walk-in Closet
LIST_125 => 161.14
LIST_122 => 
LIST_123 => 
LIST_126 => 154.18
ROOM_BR2_room_level => 1
VOWAddr => 1
ROOM_PR_room_width => 10.6
GF20121126194243879313000000 => Gate - Manned,Security Patrol
listing_office_phone => (561) 622-5000
GF20121128203448419411000000 => Dining Family,Snack Bar
selling_member_email => jafeldman38@gmail.com
LIST_87 : 2015-01-01T00:01:52
LIST_1 : 20141118214124325535000000

I want it to do this:

Record: 0 *************************

INSERT ---
LIST_87 : 2015-01-01T00:01:52
LIST_1 : 20141118214124325535000000
LIST_124 => 0.00

INSERT ---
LIST_87 : 2015-01-01T00:01:52
LIST_1 : 20141118235552432553500000
LIST_125 => 161.14

INSERT ---
LIST_87 : 2015-01-01T00:01:52
LIST_1 : 20141445635552432553500000
GF20121126194243819854000000 => Entry Lvl Lvng Area,Fire, Sprinkler,Foyer,Pantry,Volume Ceiling,Walk-in Closet

代码:

$prop_fields  = array("");
$prop_vals    = array("");
$LIST_1      = "";
$LIST_87     = "";
$count;

class Insert_Data
{

    public function create_insert_sql_from_search(){
      Global $results, $prop_fields, $prop_vals, $LIST_1, $LIST_87, $count ;
      for ($i=0; $i < count($results) ; $i++) { 
          // print "$results[$i]<br/><br/>";
          echo "<br/><br/>Record: $i *************************<br/><br/>";
          $myData = json_decode($results[$i]);
          foreach ($myData as $key => $val) {
              // We append the key and a comma to the end for every key inside the dbkeys array
              if($key == 'LIST_1'){
               $LIST_1 = $val;
               echo "LIST_1 : $LIST_1<br/>";
              }elseif($key == 'LIST_87'){
                $LIST_87 = $val;
                echo "LIST_87 : $LIST_87<br/>";
              }else{
                    echo "$key => $val<br/>";
              }
          }
      } 
    }
}
// create an object
$update = new Insert_Data();

// // show object properties
$update->create_insert_sql_from_search();
// echo "</pre>";

【问题讨论】:

  • LIST_1, LIST_87 是可能的,因为你有一个条件,但你必须验证你确实得到了它们。然后检索下一个键并打破 for each 循环

标签: php mysql arrays loops object


【解决方案1】:

Continue();

您想使用 Continue,但另请参阅 Break 并通过键直接访问数组值。

【讨论】:

  • 我研究了这个,我无法理解你希望我如何使用它?请提供有关此问题的示例,以便我更好地理解。
  • 我希望这有帮助,但没有奏效,下面我将向您展示在一位出色的工程师的帮助下,我是如何做到的以及我是如何做到的。
  • 不太确定辉煌!我看到你想出了如何使用继续。但是你的代码一团糟,根本不需要那个循环,直接访问数组键就好了,
  • Brilliant 至少可以说是轻描淡写。无论如何,我确实提到它可以进一步重构。但是,就您而言;我们尝试直接访问数组键,但鉴于我们的问题,它不起作用。因此,我们必须创建两个循环,以便在重构代码时合而为一。
【解决方案2】:
  1. 您正在使用 JSON,为什么不直接使用键检索数据而不是再次循环遍历 JSON 数组?
$myData = json_decode($results[$i]);
$List_1 = $myData->List_1;
echo "List 1 : $List_1";
$List_87 = $myData->List_87;
echo "List 87 : $List_87";
  1. 我会选择 1,因为它可以避免您循环遍历所有内容。如果您仍然想要随机一对,您可以;
$randomKey = null;
while($randomKey != "List_1" || $randomKey != "List_87"){
$keys = array_keys($myData);
$randomKey = $keys[ rand(0, count($keys)-1) ];
}

echo "$randomKey : $myData->$randomKey";

另一种方式(您的方式)是在显示记录时在 A 为真(找到 LIST_1)且 B 为真(找到 LIST_87)时在下一条记录上使用 Break

foreach ($myData as $key => $val) {
$a = false,  $b = false;
if($key == 'LIST_1'){
    $LIST_1 = $val;
    $a =  true;
               echo "LIST_1 : $LIST_1<br/>";
}elseif($key == 'LIST_87'){
    $LIST_87 = $val;
    $b = true
    echo "LIST_87 : $LIST_87<br/>";
}else{
    if($a && $b){
    echo "$key => $val<br/>";
    break;
}
}
}

【讨论】:

  • 我认为您并没有完全理解我想要完成的工作。您的第一个示例对于此解决方案是错误的,我不确定您要对第二个示例做什么?
  • @VickenCode 它从 json 中抓取一个不是 List_1 和 List_87 的随机对。是的,我清楚地了解您要完成的工作,并且我为您提供了一种不同且更快的方法
  • 非常感谢您的帮助,但您的方法不起作用,我尝试了多种方法。我相信你没有理解这个问题。这不是解决方案。如果是这样,您肯定没有将它放在与我提供给您的代码相关的上下文中,以便它可以使用。
  • @VickenCode 我刚刚在随机 JSON 上对其进行了测试,它有效,但根据您的要求,我更新了答案
【解决方案3】:
This the current workable solution and can be refactored further.

require_once('login.php');
$prop_fields  = array("");
$prop_vals    = array("");

class Insert_Data
{

    public function create_insert_sql_from_search(){
      Global $results, $prop_fields, $prop_vals, $LIST_1, $LIST_87;
      for ($i=0; $i < count($results) ; $i++) { 
          // print "$results[$i]<br/><br/>";
          echo "<br/><br/>Record: $i *************************<br/><br/>";
          $myData = json_decode($results[$i]);
          $count = 0;
          $LIST_1      = "";
          $LIST_87     = "";
          $elements    = array();
          // iterate over myData to extract LIST_1 AND LIST_87 vals
          foreach ($myData as $key => $val) {
              // We append the key and a comma to the end for every key inside the dbkeys array
              if($key == 'LIST_1') {
                $LIST_1 = $val;
                // echo "$key : $LIST_1 <br/>";
              } elseif($key == 'LIST_87'){
                $LIST_87 = $val;
                // echo "$key : $LIST_87 <br/>";
              } else {
                continue;
              }
          }
          // iterate over myData to extract everything else
          foreach ($myData as $key => $val) {
              // We append the key and a comma to the end for every key inside the dbkeys array
              if (($key == 'LIST_1') || ($key == 'LIST_87')) {
                continue;
              } else {
                // add to our array 
                array_push($elements, array($LIST_1, $key, $val, $LIST_87));
              }
          }
          // done 
          // display our results
          //print_r($elements);

          foreach ($elements as $key => $value) {
            $query = "INSERT INTO [TABLE] (`LIST_1`, `KEY`, `VALUE`, 'LIST_87') VALUES ({$elements[$key][0]}, {$elements[$key][1]}, {$elements[$key][2]}, {$elements[$key][3]});";
            print_r($query); echo "<br>";  
          }

       } // $conn->close();
    }
}
// create an object
$update = new Insert_Data();

// // show object properties
$update->create_insert_sql_from_search();
// echo "</pre>";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2021-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    相关资源
    最近更新 更多