簡體   English   中英

在不使用鍵名的情況下獲取關聯數組的值

[英]get value of associative array without using the key name

我正在嘗試JSON和PHP

我在Javascript中創建(嵌套)對象,例如

var obj2={user:{name:"will"}, age:27, country:"UK"};

我將其轉換為JSON並通過AJAX / POST發送到php文件

hr.send("firstname="+JSON.stringify(obj2));

在那里,我將其解碼,

$a=$_POST['firstname']; $b=json_decode($a,true);

所以它就像Array ( [user] => Array ( [name] => will ) [age] => 27 [country] => UK )

現在,如果我這樣做

echo $b[user][name];

我會得到“將”

在不知道鍵名的情況下,如何仍能獲得相同的結果? 做類似echo $b[0][0]; 仍然輸出“將”?

謝謝

我不確定為什么要這么做。 PHP中關聯數組的全部目的是輕松地將索引“關聯”到它們的值。 鍵名提示了該特定索引所包含的內容。 通過將數組轉換為數字索引的數組,您將丟失信息。

如果這不是問題,則可以先重新索引數組,以便能夠基於其數值偏移量訪問數組值。 使用array_values()重新索引數組,然后基於數字偏移量(而不是鍵)訪問值:

$array = array_values($b['user']);
echo $array[0]; // => 'Will'

您可以使用array_keys ,它返回一個新數組,其中所有鍵都由整數索引

$keys = array_keys($b);
$user = $b[$keys[0]];

$keys2 = array_keys($user);
$name  = $user[$keys2[0]]; // "will";

你是這個意思嗎

$b = array( 'user' => array ( 'name' => 'will' ), 'age' => 27);

echo current(current($b)); // 'will'

假定內部“數組指針”之前沒有移動過。 有關詳細信息,請參見current內容。

一個更靈活的函數是選擇第n個元素的函數:

function nth($ary, $position) {
    return array_values($ary)[$position];
}

例:

$b = array( 'user' => array ( 'name' => 'will' , 'lastname' => 'smith'), 'age' => 27);
print nth(nth($b, 0), 1); // smith

您不應該通過JSON或關聯數組。 理論上,關聯數組不能保證順序會被保留。

僅當您可以為每個對象假設標准的字段名稱順序時,此方法才有用。

創建發送和接收時將使用的標准字段名稱列表。

$objectsTypes = array('user','task')
$fieldsUser = array('firstname','lastname','age');

然后以正確的順序發送數據。 使用GET的示例(POST也可以以相同的方式工作):

?data[0][0]=Maxwell&data[0][1]=Smart&data[0][2]=35&data[1]=AnswerShoePhone

在處理數據時,您知道每個變量的期望位置。 您可以對位置進行硬編碼,也可以動態檢測它們。

echo $_GET['data'][0][0];//Maxwell
echo $_GET['data'][0][1];//Smart
echo $_GET['data'][1];//AnswerShoePhone

$indexOfUser = array_search('user',$objectsTypes);
$indexOfLastname = array_search('lastname',$fieldsUser);
echo $_GET['data'][ $indexOfUser ][ $indexOfLastname ];//Smart

如果要支持對象集合(例如,多個用戶),則可以將所有內容嵌套更深一層。 例如

?data[0][0][0]=Maxwell
&data[0][0][1]=Smart
&data[0][1][0]=Agent
&data[0][1][1]=99

$users = $_GET['data'][ $indexOfUser ]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM