Neden iki dizi değerleri aynı görünüyor, ama eşit değerlendirmek değil mi?

4 Cevap php

Ben iki dizi değerlerini karşılaştırmak zaman ben aynı görünüm iki dizeleri bakın. php kabul etmez.

$array1 = array('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = array('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2);

var_dump($results) 
//echos ['address'] => string(18) "32 Winthrop Street" ['state']=>'NY'

Neden bu?

EDIT Be advised that this isn't the actual code I'm testing, I've simplified code to illustrate my question, which is about strings being equal, not whether or not this code will run.

4 Cevap

Lütfen giriş diziler gerçekten böyle bakmak emin olun. Eğer tarayıcınızda verileri yankılanan ediyorsanız, boşluk kaçırabilir. '32 Winthrop Street', örneğin, ' 32 Winthrop Street' ile aynı değildir. Aynı diziniz tuşları için geçerlidir.

Sen $array1 = array_map('trim', $array1) ve $array2 = array_map('trim', $array2) önde ve değerlerinden boşluk sondaki kaldırmak için olabilir. Bu herhangi bir fark olmadığını görmek?

Onlar gerçekten kontrol ederek aynı konum olmadığını kontrol edebilirsiniz if ($array1['address'] === $array2['address']). Bu yanlış değerlendirilirse, bir fark var, sadece (muhtemel nedenine hazırlanması için binaryLV's answer bakınız) bunu göremiyoruz. True değerlendirir ise, dizi anahtarları daha yakından bakmak isteyebilirsiniz.

Öncelikle: Kod bile çalışacak ama hattında 2 bir sözdizimi hatası ölmeyecek Burada düzeltilmiş versiyonu.:

<?php
$array1 = array ('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = array ('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2);

var_dump($results); 

İkincisi: PHP 5.2.12 ve 5.3.1 ile test edilmiş ve çalışır. Bu yankıları:

array(1) {
  ["state"]=>
  string(2) "NY"
}

Bu gerçekten yanlış sözdizimi sadece dolu. Hepsi bu.

Değerleri kodlanmış ya da başka bir kaynaktan mı? var_dump($array1['address'], $array2['address']) ne verir? Belki bazı "görünmez" boşluk bir yerde var mı?

$array1 = ('address'=>'32 Winthrop Street','state'=>'NY');
$array2 = ('address'=>'32 Winthrop Street');

$results = array_diff_assoc($array1, $array2); // remove the ' on this line 

' muhtemelen daha sonra "dizesini" kapatmayın deşiyor ... bir dize düşünce içine PHP motoru kafa karıştırıcı.

Benim için bir yazım hatası var gibi görünüyor.